如何在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