Как получить данные из каждого кластера в k-средних - PullRequest
0 голосов
/ 27 мая 2018

Вот мой код

K означает кластеризацию

def doKmeans(X, nclust):
    model = KMeans(nclust)
    model.fit(X)
    clust_labels = model.predict(X)
    cent = model.cluster_centers_
    return (clust_labels, cent)

clust_labels, cent = doKmeans(df_new, 4)
kmeans = pd.DataFrame(clust_labels)

df_new.insert((df_new.shape[1]),'clusterNo',kmeans)

Итак, будет 4 кластера, я хочу получить данные для всех 4 кластеров отдельно и провести дальнейший анализ.

1 Ответ

0 голосов
/ 27 мая 2018

Несколько комментариев для начала.Во-первых, после model.fit (X) вы можете получить доступ ко всем меткам с помощью model.labels_.Затем модель model.predict () может использоваться для прогнозирования меток для новых данных.Во-вторых, если вы не уверены, что вам не понадобится модель для прогнозирования новых данных, лучше, чтобы функция также возвращала фактическую модель.

Так же, для вашего вопроса вы можете добавить предсказанные метки кисходный фрейм данных, а затем подмножество, как показано ниже, с присвоением результата новому фрейму данных или без него, или используйте другие методы, например .groupby (), для анализа отдельных кластеров.

import pandas as pd
from sklearn.cluster import KMeans
import numpy as np

# Data
X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])
df = pd.DataFrame(X, columns = ['x', 'y'])


def doKmeans(X, nclust):
    model = KMeans(nclust)
    model.fit(X)
    return (model.labels_, model.cluster_centers_)

clust_labels, cent = doKmeans(X, 2)

df['label'] = clust_labels
df

df[df['label'] == 1]

df
Out[26]: 
   x  y
0  1  2
1  1  4
2  1  0
3  4  2
4  4  4
5  4  0

df['label'] = clust_labels
df
Out[27]: 
   x  y  label
0  1  2      1
1  1  4      1
2  1  0      0
3  4  2      0
4  4  4      1
5  4  0      0

df[df['label'] == 1]
Out[28]: 
   x  y  label
0  1  2      1
1  1  4      1
4  4  4      1
...