我使用python-Kmean聚类算法对集群文档进行聚类。我创建了一个术语文档矩阵
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
vectorizer = TfidfVectorizer(tokenizer=tokenize, encoding='latin-1',
stop_words='english')
X = vectorizer.fit_transform(token_dict.values())
然后我使用以下代码应用Kmean集群
^{pr2}$我的下一个任务是查看每个集群中的顶级术语,在googole上搜索表明很多人都使用了km.集群中心_.argsort()[:,::-1]用于使用以下代码查找群集中的顶级项:
print("Top terms per cluster:")
order_centroids = km.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
print("Cluster %d:" % i, end='')
for ind in order_centroids[i, :10]:
print(' %s' % terms[ind], end='')
print()
现在我的问题是我的理解集群中心返回簇中心的坐标,因此,例如,如果有100个特征和3个簇,它将返回一个由3行和100列组成的矩阵,表示每个簇的质心。我想了解在上面的代码中如何使用它来确定集群中的顶级术语。 谢谢你的评论 纳迪姆
你对星团中心的形状和意义是正确的。因为您使用的是Tf Idf vectorizer,所以您的“特性”是给定文档中的单词(每个文档都是它自己的向量)。因此,在对文档向量进行聚类时,质心的每个“特征”都表示该词与它的相关性。”单词“(在词汇表中)=“特征”(在向量空间中)=“列”(在质心矩阵中)
get_feature_names
调用获取列索引到它所代表的单词的映射(因此从文档中可以看出。。。如果这没有如预期的那样工作,只需反转vocabulary_
矩阵以得到相同的结果)。在然后
.argsort()[:, ::-1]
行将每个质心转换成一个排序(降序)的列表,该列表中最“相关”(高度值)的列,因此是最相关的单词(因为words=columns)。在剩下的代码只是打印,我相信这不需要任何解释。代码真正要做的就是将每个质心按最有价值的特征/单词按降序排序,然后将这些列映射回其原始单词并打印出来。在
相关问题 更多 >
编程相关推荐