如何在kmeans scikit learn中识别集群标签

Posted

技术标签:

【中文标题】如何在kmeans scikit learn中识别集群标签【英文标题】:How to identify Cluster labels in kmeans scikit learn 【发布时间】:2015-04-05 08:22:54 【问题描述】:

我正在学习 python scikit。 这里给出的例子 显示每个集群中出现次数最多的单词,而不是集群名称。

http://scikit-learn.org/stable/auto_examples/document_clustering.html

我发现 km 对象有“km.label”,其中列出了质心 id,即数字。

我有两个问题

1. How do I generate the cluster labels?
2. How to identify the members of the clusters for further processing.

我具备 k-means 的工作知识并了解 tf-ids 概念。

【问题讨论】:

我遇到了同样的问题。假设您有一个由 38 个观测值(行)和 5 个特征(列)组成的数据集。您需要 19 个集群。例如,在 kmeans 聚类之后,您如何知道观察 24 (row=24) 属于聚类 5? 【参考方案1】:

这很简单

我的环境: scikit-learn 版本 '0.20.0'

只需使用属性.labels_,如文档中所示:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

from sklearn.cluster import KMeans
import numpy as np

工作示例:

x1 = [[1],[1],[2],[2],[2],[3],[3],[7],[7],[7]]
x2 = [[1],[1],[2],[2],[2],[3],[3],[7],[7],[7]]

X_2D = np.concatenate((x1,x2),axis=1)

kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init=10, random_state=0)
labels = kmeans.fit(X_2D)

print(labels.labels_)

输出:

[2 2 3 3 3 0 0 1 1 1]

如您所见,我们有 4 个簇,并且 X_2D 数组中的每个数据示例都被相应地分配了一个标签。

【讨论】:

【参考方案2】:
    如何生成集群标签?

我不确定你的意思。除了集群 1、集群 2、...、集群 n 之外,您没有集群标签。这就是为什么它被称为无监督学习,因为没有标签。

你的意思是你真的有标签,你想看看聚类算法是否碰巧根据你的标签对数据进行聚类?

在这种情况下,您链接到的文档提供了一个示例:

print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels, km.labels_))
print("Completeness: %0.3f" % metrics.completeness_score(labels, km.labels_))
print("V-measure: %0.3f" % metrics.v_measure_score(labels, km.labels_))
    如何识别集群成员以进行进一步处理。

请参阅documentation for KMeans。特别是predict 方法:

预测(X)

参数: X : array-like, sparse matrix, shape = [n_samples, n_features] 要预测的新数据。

返回: 标签:数组,形状 [n_samples,] 每个样本所属簇的索引。

如果您不想预测新事物,km.labels_ 应该对训练数据进行预测。

【讨论】:

我正面临一个相关问题。我试图在我的标签和 km.labels_ 之间得到一个混淆矩阵。在这里,我的标签是字符串,km.labels_ 是整数。所以它给出了ValueError: Mix of label input types (string and number)。有没有办法解决这个问题?

以上是关于如何在kmeans scikit learn中识别集群标签的主要内容,如果未能解决你的问题,请参考以下文章

Scikit-learn,KMeans:如何使用 max_iter

如何从 scikit-learn KMeans 中获取聚类中心的文本?

k-means+python︱scikit-learn中的KMeans聚类实现( + MiniBatchKMeans)

使用 GridSearchCV scikit-learn 在管道中的 KMeans

是否可以在 Python(Scikit-Learn)中对 KMeans 中的非浮点数据进行聚类?

Scikit-learn kmeans 聚类