Как получить имя из кластера из кластера KMeans? - PullRequest
0 голосов
/ 31 октября 2018

Я собираю данные трейдеров из прошлого в кластер, используя 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 голосов
/ 31 октября 2018

Я думаю, вам нужно что-то вроде ниже,

Сначала получите значение метки и присвойте его в свой фрейм данных, затем примените группирование по меткам, найдите столбец с уникальным именем (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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...