k-means 聚类中的项数

Posted

技术标签:

【中文标题】k-means 聚类中的项数【英文标题】:Number of terms within a k-means cluster 【发布时间】:2021-08-19 01:56:10 【问题描述】:

我需要知道 k-means 生成的聚类中的项数。

我什至可以在此链接上找到可能的解决方案,内容失败。K-Means Clustering - output clusters contains same number of elements but in different order [ Python ]

下面是我的代码:

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 个示例。 Clusterlists 1 提供例如 3150 个示例。但是,它显示的是集群中所有索引的数据库中术语的总值。

【问题讨论】:

您想知道到达每个质心的样本数/示例数吗? 那个。我想知道每个集群中有多少术语/样本。例如,集群 1 中有多少个单词?由于我一共有 52005 个词,所以我想知道每个聚类中有多少个词。 【参考方案1】:

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

import numpy as np

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

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

【讨论】:

【参考方案2】:

要查找每个质心(集群)中存在的样本/示例的数量,您首先创建一个零数组,表示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)

【讨论】:

以上是关于k-means 聚类中的项数的主要内容,如果未能解决你的问题,请参考以下文章

[聚类算法] K-means 算法

在 K-means 聚类中组织聚类

k-means聚类算法python实现,导入的数据集有啥要求

聚类算法K-means

数据挖掘算法:k-means算法的C++实现

使用 K-Means 聚类时,为啥我的数据点不在正确准确的聚类中?