下面通过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的选择图像