Python之《机器学习系统设计》第四章

第四章:主题模型

嵌在狄利克雷分配 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/





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值