【问题标题】:Number of terms within a k-means clusterk-means 聚类中的项数
【发布时间】: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 个词,所以我想知道每个聚类中有多少个词。

标签: python python-3.x scikit-learn cluster-analysis k-means


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 2011-08-13
      • 2013-08-08
      • 2013-02-14
      • 2018-01-14
      • 2013-01-11
      • 2016-02-01
      • 2013-02-07
      • 2019-05-04
      相关资源
      最近更新 更多