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

kmeans中的k选择

 

相关文章: