这是我的代码
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个集群的数据 分开进行进一步的分析。
答案 0 :(得分:0)
一些评论开始。首先,在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