如何从 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 模型中绘制集群和中心?