如何从主题建模中制作主题百分比条形图?

Posted

技术标签:

【中文标题】如何从主题建模中制作主题百分比条形图?【英文标题】:How to make percentage bar chart of topics from topic modeling? 【发布时间】:2019-11-21 12:55:02 【问题描述】:

我已经为此绞尽脑汁一个星期了。

我想要

    运行 NMF 主题建模 通过查看权重的最大值为每个文档分配一个主题, 使用 matplot 将此分布绘制为百分比条形图。 (即:X 轴上的主题,以及 y 轴上属于该主题的 % 文档。)

这是一些玩具数据并完成第 1 步和第 2 步:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import NMF
import pandas as pd

# Get data
data = 
    "Documents": ["I am a document", 
                  "And me too", 
                  "The cat is big",
                  "The dog is big"
                  "My headphones are large", 
                  "My monitor has rabies", 
                  "My headphones are loud"
                  "The street is loud "]


df = pd.DataFrame(data)

# Fit a TFIDF vectorizer 
tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(df['Documents'])

# Run NMF
nmf_model = NMF(n_components=4, random_state=1).fit(tfidf)

# Weights
W = nmf_model.transform(tfidf)

# Topics
H= nmf_model.components_

现在我可以将文档分配给主题:

# Will return document topics as list like [1, 4, 1...] to 
# represent that the first document is topic 1, the second 4, and so on. 
topics = pd.DataFrame(W).idxmax(axis=1, skipna=True).tolist()

好吧,现在我应该能够通过这两个结构得到我想要的,但我不知所措。

【问题讨论】:

【参考方案1】:

IIUC,你要画一个条形字符,所以不要把主题改成列表:

topics = pd.DataFrame(W).idxmax(axis=1, skipna=True)

plt.bar(x=topics.index, height=topics.mul(100)/topics.sum())
plt.show()

给予:

【讨论】:

是的,无论如何都可以让它看起来不奇怪(即:额外的 xaticks) 那些额外的xticks 对应于那些零计数的主题。您可以通过tmp = topics[topics.ne(0)] 删除它们并将bar 中的所有topics 替换为tmp【参考方案2】:

看起来像是 Counter() 的一个用例。 我会写这样的:

from collections import Counter

mylist = [1,1,1,1,2,2,3,1,1,2,3,1,1,1]
mycount = Counter(mylist)
for key,value in mycount.items():
    print(key,value)  

这会以以下结构输出您的主题:

1 9
2 3
3 2  

对于潜在狄利克雷/非负矩阵要注意的一点是,整个点是一个句子,由多个主题组成。最大化权重以将每个主题分配给单个主题可能会破坏目的。您可能还需要考虑如何处理无意义的句子,因为您的算法会自动将它们分配给当前的主题。

【讨论】:

以上是关于如何从主题建模中制作主题百分比条形图?的主要内容,如果未能解决你的问题,请参考以下文章

黑苹果 OpenCore 引导制作开机主题教程

怎样制作wordpress手机主题

如何用excel

手机QQ主题如何制作

在process on中,如何把自己制作的导图给别人?

求CTF主题壁纸制作