龙空技术网

肘方法确定KMeans聚类的最佳K值

勇敢的科研生活 95

前言:

如今咱们对“kmeans函数参数”都比较关怀,各位老铁们都需要剖析一些“kmeans函数参数”的相关文章。那么小编同时在网上收集了一些关于“kmeans函数参数””的相关文章,希望小伙伴们能喜欢,大家快快来了解一下吧!

当Kmeans聚类的K没有指定时,可以通过肘部法来估计聚类数量

K_means参数的最优解是以成本函数最小化为目标,成本函数为各个类畸变程度之和,每个类的畸变程度等于该类重心与其内部成员位置距离的平方和

但是平均畸变程度会随着K的增大先减小后增大,所以可以求出最小的平均畸变程度

从图中可以看出图片像一只手肘,肘处的K即为最佳K值:K=2

import numpy as npfrom sklearn.cluster import KMeansfrom scipy.spatial.distance import cdistimport matplotlib.pyplot as plt cluster1 = np.random.uniform(0.5, 1.5, (2, 10))cluster2 = np.random.uniform(3.5, 4.5, (2, 10))X = np.hstack((cluster1, cluster2)).T # plt.figure()# plt.axis([0, 5, 0, 5])# plt.grid(True)# plt.plot(X[:,0],X[:,1],'k.'); K = range(1, 10)meandistortions = []for k in K: kmeans = KMeans(n_clusters=k) kmeans.fit(X) meandistortions.append(sum(np.min(cdist(X, kmeans.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0]) plt.plot(K, meandistortions, 'bx-')plt.xlabel('k')# plt.ylabel('平均畸变程度',fontproperties=font)plt.ylabel('Ave Distor')# plt.title('用肘部法则来确定最佳的K值',fontproperties=font);plt.title('Elbow method value K');plt.show()

标签: #kmeans函数参数