Несколько комментариев для начала.Во-первых, после 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