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 聚类中的项数的主要内容,如果未能解决你的问题,请参考以下文章