第四章:主题模型
嵌在狄利克雷分配 LDA
在Python前面写上
# -*- coding: utf-8 -*-
就可以使用中文
scikit-learn 并不支持潜在狄利克雷分配,所以,我们将使用Python的gensim包
通过 pip install gensim实现安装
from gensim import corpora,models,similarities
corpus = corpora.BleiCorpus('./data/ap/ap.dat','./data/ap/vocab.txt')
model = models.LdaModel(corpus,num_topics=100,id2word=corpus.id2word)
topics = [model[c] for c in corpus]
print topics[0]
输出结果
[(2, 0.036698421932862442), (9, 0.13255834450474419), (44, 0.019677209292788215), (50, 0.038697239755167506), (51, 0.094534030521493825), ...]等
#用Numpy的数组来存储所有的主题统计数据,并计算两两之间的距离
import numpy as np
dense = np.zeros((len(topics),100),float)
for ti,t in enumerate(topics):
for tj,v in t:
dense[ti,tj] = v
#这里dense是一个主题的矩阵,现在计算两两之间的距离
from scipy.spatial import distance
pairwise = distance.squareform(distance.pdist(dense))
#最后把距离矩阵对角线的元素设为较大的值,否则函数总会返回相同的元素,因为跟这个文档最接近得就是他自己
largest = pairwise.max()
for ti in range(len(topics)):
pairwise[ti,ti] = largest+1
def closest_to(doc_id):
return pairwise[doc_id].argmin()
print(closest_to(2))
词语云图
http://www.tagxedo.com/app.html
http://www.wordle.net/