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

时间:2018-10-31 10:20:34

标签: python-3.x pandas numpy scikit-learn k-means

我正在使用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']

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

1 个答案:

答案 0 :(得分:1)

我认为您需要以下类似内容

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

下面的代码片段演示了您的问题。

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]

对于Dict表示法,

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]