如何获取每个聚类中的前N个频繁词?学习
How to get the top N frequent words in each cluster? Sklearn
我有一个文本语料库,每行包含 1000 多篇文章。我在 python 中使用了使用 Sklearn 的层次聚类来生成相关文章的聚类。这是我用来做聚类的代码
注:X, 是一个稀疏的 NumPy 二维数组,行对应文档,列对应术语
# Agglomerative Clustering
from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(affinity="euclidean",linkage="complete",n_clusters=3)
model.fit(X.toarray())
clustering = model.labels_
print (clustering)
我指定簇数 = 3,在该簇数处切断树以获得像 K-mean 这样的扁平聚类
我的问题是:如何获取每个聚类中的前N个频繁词?这样我就可以为每个集群建议一个主题。
谢谢
一个选项是将 X 从稀疏 numpy 数组转换为 pandas 数据帧。行仍然对应文档,列对应单词。如果你有一个按数组列顺序排列的词汇列表(在下面用作 your_word_list
),你可以尝试这样的事情:
import pandas as pd
X = pd.DataFrame(X.toarray(), columns=your_word_list) # columns argument is optional
X['Cluster'] = clustering # Add column corresponding to cluster number
word_frequencies_by_cluster = X.groupby('Cluster').sum()
# To get sorted list for a numbered cluster, in this case 1
print word_frequencies_by_cluster.loc[1, :].sort(ascending=False)
作为旁注,您可能需要研究更常用于自然语言处理的算法(例如 LDA)和距离度量(余弦)。如果你想提取主题,有一个很好的主题建模 sklearn tutorial。
我有一个文本语料库,每行包含 1000 多篇文章。我在 python 中使用了使用 Sklearn 的层次聚类来生成相关文章的聚类。这是我用来做聚类的代码
注:X, 是一个稀疏的 NumPy 二维数组,行对应文档,列对应术语
# Agglomerative Clustering
from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(affinity="euclidean",linkage="complete",n_clusters=3)
model.fit(X.toarray())
clustering = model.labels_
print (clustering)
我指定簇数 = 3,在该簇数处切断树以获得像 K-mean 这样的扁平聚类
我的问题是:如何获取每个聚类中的前N个频繁词?这样我就可以为每个集群建议一个主题。 谢谢
一个选项是将 X 从稀疏 numpy 数组转换为 pandas 数据帧。行仍然对应文档,列对应单词。如果你有一个按数组列顺序排列的词汇列表(在下面用作 your_word_list
),你可以尝试这样的事情:
import pandas as pd
X = pd.DataFrame(X.toarray(), columns=your_word_list) # columns argument is optional
X['Cluster'] = clustering # Add column corresponding to cluster number
word_frequencies_by_cluster = X.groupby('Cluster').sum()
# To get sorted list for a numbered cluster, in this case 1
print word_frequencies_by_cluster.loc[1, :].sort(ascending=False)
作为旁注,您可能需要研究更常用于自然语言处理的算法(例如 LDA)和距离度量(余弦)。如果你想提取主题,有一个很好的主题建模 sklearn tutorial。