如何以k-means

时间:2018-05-26 22:35:46

标签: python cluster-computing k-means

这是我的代码

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 :(得分: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