Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组数据集1:https://developer.aliyun.com/article/1485101
每个话题的前N个关键词词云
虽然你已经看到了每个主题中的主题关键词是什么,但字数大小与权重成正比的词云是很好的可视化方法。
# 1. 每个主题中前N个词的词云 from matplotlib import pyplot as plt from worcloud mport WrCloud,STOPWODS clod = WordClud(stopwds=stp_ords, barounolr='white', reer_oronal=1.0) plt.sow()
主题关键词的字数
当涉及主题中的关键字时,关键字的重要性(权重)很重要。除此之外,这些单词在文档中出现的频率也很有趣。
让我们在同一图表中绘制字数和每个关键字的权重。
您要关注出现在多个主题中的词以及相对频率大于权重的词。通常,这些词变得不那么重要。我在下面绘制的图表是在开始时将几个这样的词添加到停用词列表并重新运行训练过程的结果。
tops = l_mdl.swtcs(foatd=Fase) # 绘制主题关键词的字数和权重图 fig, as = pltuls(2, 2, fiiz=(16,10), sey=rue, di=160) fig.tigh\_lyut\_pad=2) plt.shw()
按主题着色的句子图表
文档中的每个单词都代表 4 个主题之一。让我们根据给定文档中的每个单词所属的主题 id 为其着色。
# 对N个句子进行着色的句子 for i, ax in eumate(xes): cour = corp\[i-1\] 。 topprcs, wrdits, wrdihius = ldacopr copr wodoac = (lmod2word\[wd (lmod2word\[wd, tpic\[0\]) or w, tpc in odid_opcs\] # 绘制矩形区域 tpcred = soted(tpps, key= x: (x\[1\]), rvese=True) word_pos = 0.06 plt.subdt(wsace=0, hsace=0) plt.show()
文件中讨论最多的话题是什么?
让我们计算归因于每个主题的文档总数。
# 对N个句子进行着色 主导话题 = 话题百分比 = for i, crp in euete(opu_el): topcs, wordics, wrlues = moelcrp crp dopic = soted(torcs, key = lmda x: x\[1\], reerse=Tue)0 00 0 。 doics, toages = topent(mol=lda, copus=crus,en=-) # 每个文档中主导话题的分布 dfc = dh\_dc.t\_frme(ame='cunt').eeinex() # 按实际权重计算的总主题分布 topweig = pd.DaaFae(\[dct(t) for t in toges\] ) # 每个主题的前三个关键词 \[(i, tpic) for i, tocs in lda.shcs(fted=Flse) for j, (tic, wt) in eae(toic)if j < 3)
让我们做两个图:
- 通过将文档分配给该文档中权重最大的主题来计算每个主题的文档数。
- 通过总结每个主题对各自文档的实际权重贡献来计算每个主题的文档数量。
from mtpltli.tiker import ucFattr # 绘图 fig, (ax1, ax2) = pl.supot(1, 2) # 按主要议题分布的议题 ax1.bar(data=df_dc) # 按主题权重的主题分布 ax2.ar(x='iex', hegh='cout', dat=dfoc, with=.5, plt.sow()
t-SNE(t分布-随机邻近嵌入)聚类图
让我们使用 t-SNE(t分布-随机邻近嵌入)算法在 2D 空间中可视化文档集群。
# 获取话题权重和主导话题 ------------ # 获取主题权重 for i, row_list: tophts.apd(\[w for i, w in rost0 0\] ) # 主题权重的数组 arr = pd.Dame(tohts).fna(0).vales # 保持良好的分离点(可选) rr = arp.aax(rr)>0.35 p.aax(rr) > 0.35 。 # 每个文档中的主要议题编号 to_n = np.agax(rr, ais=1) # tSNE降维 tsel = TSE(n=2, vre=1, rae=0, ae=.99, int='pca') tlda = tsl.frm(arr) # 使用Bokeh绘制主题集群图 oueook() n_tics = 4 m plot.scatter(xda:, :,)
pyLDAVis
最后,pyLDAVis 是最常用的,也是一种将主题模型中包含的信息可视化的好方法。
pyLDvis.enaok()
结论
我们从头开始导入、清理和处理新闻组数据集构建 LDA 模型。然后我们看到了多种可视化主题模型输出的方法,包括词云,它们直观地告诉您每个主题中哪个主题占主导地位。t-SNE 聚类, pyLDAVis
提供了更多关于主题聚类的细节。