下面通过python定义一个函数来实现kmeans中k的选择,输入为可选择k的最大值和原始数据,最后输出不同k的折线图,一般选择图中拐点 def SelectK(maxK,totalList): from scipy.spatial.distance import cdist K = range(1, maxK) meandistortions = [] for k in K: kmeans = KMeans(n_clusters=k) kmeans.fit(totalList) meandistortions.append(sum(np.min(cdist(totalList, kmeans.cluster_centers_, 'euclidean'), axis=1)) / np.array(totalList).shape[0]) plt.plot(K, meandistortions, 'bx-') plt.xlabel('k') plt.ylabel('平均畸变程度') plt.xticks(K) plt.title('用肘部法则来确定最佳的K值') plt.show()
下面通过自己找的一些数据来生成的k的选择图像