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