文本分类(五):使用LDA进行文本的降维---提特征

每个文本可以看作是由不同的主题构成了,各个主题可以当做这篇文本的特征。

# _*_coding:utf-8 _*_
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
import numpy as np
from gensim import corpora, models, similarities
from pprint import pprint
import time
import jieba
import os
from six import iteritems
corpus = corpora.MmCorpus("./corpus.mm") #load生成的文本词向量
print '正在计算文档TF-IDF --'
t_start = time.time()
corpus_tfidf = models.TfidfModel(corpus)[corpus]
corpus_tfidf.save('corpus_tfidf_model')
#corpus_tfidf = models.TfidfModel.load('corpus_tfidf_model') load tf_ifd model
print "建立文档TF——IDF完成,用时%.3f秒" % (time.time() - t_start)
正在计算文档TF-IDF --
建立文档TF——IDF完成,用时108.745秒
print 'LDA模型拟合推断--'
num_topics = 100  #设置主题数目
t_start = time.time()
lda = models.LdaModel(corpus_tfidf, num_topics=num_topics, id2word=dictionary,alpha=0.01,eta=0.01,
                      minimum_probability=0.001, update_every=1, chunksize=100, passes=1)
lda.save('corpus_lda.model') #保存一下训练的模型
#lda = models.LdaModel.load('corpus_lda.model')
print 'LDA模型完成,训练时间为%.3f秒' % (time.time() - t_start)
LDA模型拟合推断--
LDA模型完成,训练时间为11368.268秒

ps:主机是8g内存的,然后设置主题数目过大的时候会出现 Memroy Out 问题。在这里设置了100

#随机打印某10个文档的主题
M = 121177
num_show_topic = 10
print '10个文档的主题分布:'
doc_topics = lda.get_document_topics(corpus_tfidf)
idx = np.arange(10)
np.random.shuffle(idx)
idx = idx[:10]
for i in idx:
    topic = np.array(doc_topics[i])
    topic_distribute = np.array(topic[:,1])
    topic_idx = topic_distribute.argsort()[:-num_show_topic-1:-1]
    print ("第%d个文档的前%d个主题:" % (i, num_show_topic)), topic_idx
    print topic_distribute[topic_idx]
num_show_term = 20
for topic_id in range(20):
    print '主题#%d:\t' % topic_id
    term_distribute_all = lda.get_topic_terms(topicid=topic_id)
    term_distribute = term_distribute_all[:num_show_term]
    term_distribute = np.array(term_distribute)
    term_id = term_distribute[:,0].astype(np.int)
    print "词:\t",
    for t in term_id:
        print dictionary.id2token[t],
    print "\n概率:\t",term_distribute[:,1]

你可能感兴趣的:(文本分类(五):使用LDA进行文本的降维---提特征)