k-means聚类中的聚类项数

3

我需要知道由k-means生成的簇中术语的数量。

甚至可以在此链接上找到可能的解决方案,内容如下。

以下是我的代码:

vect = TfidfVectorizer(input='filename', stop_words=stopwords_list, encoding='utf8', ngram_range=(1,2), min_df=3)
tf_idf_matrix = vect.fit_transform(list_of_files)
print(tf_idf_matrix)
kmeans_6 = KMeans(n_clusters=17, n_init=10, init="k-means++", max_iter=100)
clustter6 = kmeans_6.fit_predict(tf_idf_matrix)
clustter6
order_centroids = kmeans_6.cluster_centers_.argsort()[:, ::-1]
termos = list(vect.vocabulary_)
clusterlists = []
for i in range(17):
dummy_list  = []
  for ind in order_centroids[i]:
    dummy_list.append('%s' % termos[ind])
  clusterlists.append(dummy_list)

上述代码的输出如下:
clusterlists[0] = 52005 examples
clusterlists[1] = 52005 examples. 

例如,我想要展示集群列表[0],例如3000个示例。 集群列表1呈现了3150个示例。 但是它显示了数据库中所有聚类索引的术语总值。

你想知道每个质心收到的样本/示例数量吗? - Omar AlSuwaidi
我想知道每个聚类中有多少项/样本。例如,聚类1中有多少单词? 由于我总共有52005个单词,我想知道每个聚类中有多少单词。 - CH97
np.bincount(clustter6) ? - PatrickT
2个回答

1

KMeans有一个labels_属性,它为每个样本存储了该样本被分配到的簇编号。您可以使用np.unique()来计算这些数字:

import numpy as np

print(np.unique(kmeans_6.labels_, return_counts=True))

这将打印两个数组:首先是群集ID编号列表,然后是相应的计数。

0

为了找到每个质心(簇)中存在的样本/示例数量,您首先需要创建一个表示k个中心的零数组,如下所示:

clusterlists = np.zeros(len(order_centroids))  # len = 17 in your case

数组的每个索引对应一个唯一的质心/簇。(例如:索引0 = 质心#0,索引1 = 质心#1...)

现在,为了使数组中的每个条目表示每个簇中成员的数量,您可以将+1添加到与遇到的样本所属的簇相对应的索引中:

for i in clustter6:
    clusterlists[i] += 1
print(clusterlists)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接