如何在python中使用K Means识别和分离集群?

时间:2019-07-10 19:08:38

标签: python cluster-analysis linear-regression k-means unsupervised-learning

我正在尝试使用K-means方法在数据集中查找聚类。我通过弯头法得到了簇的数量,但是不知道如何识别和分离这些簇以对每个簇进行进一步分析,就像对每个簇应用线性回归一样。我的数据集包含两个以上的变量。

我通过弯头法得到的簇数

应用Kmeans

distortions = []
K = range(1,10)
for k in K:
kmeanModel = KMeans(n_clusters=k).fit(df)
kmeanModel.fit(df)
distortions.append(sum(np.min(cdist(df, kmeanModel.cluster_centers_, 'euclidean'), axis=1))**2 / df.shape[0])

簇数的肘法

plt.plot(K, distortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Distortion')
plt.title('The Elbow Method showing the optimal k')
plt.show()

1 个答案:

答案 0 :(得分:1)

假设您发现,值k是使用Elbow方法的数据的最佳簇数。

因此,您可以使用以下代码将数据划分为不同的群集:

kmeans = KMeans(n_clusters=k, random_state=0).fit(df)
y = kmeans.labels_    # Will return the cluster numbers for each datapoint
y_pred = kmeans.predict(<unknown_sample>)    # If want to predict for a new sample

此后,您可以根据以下群集将数据分开:

for i in range(k):
    cluster_i = df[y == i, :]    # Subset of the datapoints that have been assigned to the cluster i
    # Do analysis on this subset of datapoints.

您可以在此链接中找到与不同参数有关的更多详细信息:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html