如何从 KMeans 集群中获取集群的名称?

Posted

技术标签:

【中文标题】如何从 KMeans 集群中获取集群的名称?【英文标题】:How to get name from the cluster from KMeans clustering? 【发布时间】:2019-04-04 11:39:17 【问题描述】:

我正在使用 Kmeans 将过去的交易者数据聚类到集群中。我有 10 个交易者,我聚集成 3 个集群。现在获得每个索引的集群和标签后,我想知道每个集群拥有的交易者的名称。例如,如果 Cluster-0 有 3 个交易者,那么输出应该类似于 'Cluster0': 'Name1','Name2','Name3' 'Cluster1': 'Name5','Name4','Name6' 等等等等。我能够通过

获得属于每个集群的数据点的索引

cluster_dict = i: np.where(data['Labels'] == i) for i in range(n_clusters) 然后我有来自新交易者数据的索引列表,如0-16 trader1, 16-32 trader2 之类的。我在列表中也有交易者的名字['name1','name2','name3']

如上所述,有什么方法可以找回属于每个集群的交易者名称。如果是,那么请帮助我。

【问题讨论】:

Python sklearn-KMeans how to get the values in the cluster的可能重复 @Urvish - 你的问题解决了吗?如果您有任何疑问,请随时提出。 @Cleb 用于获取索引的行来自该问题本身。所以我的问题不是重复的,而是从我所看到的情况下向该问题又迈进了一步。 【参考方案1】:

我认为你需要像下面这样的东西,

首先获取标签值并将其分配到您的数据框中,然后根据标签应用 groupby by 并在名称 (A,B,C) 列中找到唯一并存储结果。

以下代码 sn-p 演示了您的问题。

from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
X = pd.DataFrame([[1, 2,'A'], [1, 4,'A'], [1, 0,'B'],[4, 2,'C'], [4, 4,'C'], [4, 0,'B']])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X[[0,1]])
result= kmeans.labels_
X['label']=result
print X.groupby('label')[2].unique()

输出:

label
0    [A, B]
1    [C, B]

对于字典表示,

print X.groupby('label')[2].unique().to_dict()

输出:

0: array(['A', 'B'], dtype=object), 1: array(['C', 'B'], dtype=object)

要在下面使用相同的数据框获得结果,

X['cluster_name']= X.groupby('label')[2].transform('unique')

输出:

   0  1  2  label cluster_name
0  1  2  A      0       [A, B]
1  1  4  A      0       [A, B]
2  1  0  B      0       [A, B]
3  4  2  C      1       [C, B]
4  4  4  C      1       [C, B]
5  4  0  B      1       [C, B]

【讨论】:

你的回答真的很好。我能想到的唯一问题是在 df 中将名称作为单独的列,因为现在我只有一个名称列表,我不知道如何在 df 中添加它们。一件事是遍历 df 的索引,然后查看索引是否小于每个交易者 df 的大小,然后添加该名称,否则不添加名称。你有什么建议? 唯一的问题是我从一开始就没有名称作为 df 中的 A、B 和 C。您能帮我如何将它们作为 df.xml 中的单独列获取吗?如果我能得到那个专栏,你的答案是正确的。我有像[A,B,C] 这样的名称列表,但不知道如何将其扩展为列。 @Urvish - 为此,您必须出示您的 df。没有看到你的 df,很难给出建议。 @Urvish - 您还有与此相关的任何问题,如果有,请随时提出与此相关的任何问题,或者接受我的回答。将来很容易被其他人识别。 我按照您建议的代码进行了这项工作。谢谢你的帮助。

以上是关于如何从 KMeans 集群中获取集群的名称?的主要内容,如果未能解决你的问题,请参考以下文章

获取集群的第一个元素和集群 ids kmeans spark

如何使用 Matplotlib 从多特征 kmeans 模型中绘制集群和中心?

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

如何将 Mahout KMeans 集群集成到应用程序中?

使用 Spark MLlib KMeans 从数据中预测集群

如何在opencv中访问特定的kmeans集群