K-means算法--“肘部”观察法用于粗略的估计合理的类簇个数

来源:互联网 发布:义乌淘宝美工培训 编辑:程序博客网 时间:2024/04/25 13:27

'''

K-means聚类模型所采用的迭代算法,直观易懂,并且非常实用,但是有俩大缺陷。1,容易收敛到局部最优。2需要预先设定簇的数量(因为开始无法准确的确定簇的数量,可以采用“肘部“观察法去大致估计簇的数量)

'''

import numpy as np

from sklearn.cluster import KMeans
from scipy.spatial.distance import cdist
import matplotlib.pyplot as plt


#使用均匀分布函数随机三个簇,每个簇周围有10个样本数据点
cluster1 = np.random.uniform(0.5,1.5,(2,10))
cluster2 = np.random.uniform(5.5,6.5,(2,10))
cluster3 = np.random.uniform(3.0,4.0,(2,10))


#绘制30个样本数据点的分布图像
X = np.hstack((cluster1,cluster2,cluster3)).T
plt.scatter(X[:,0],X[:,1])
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()


#使用9中不同的聚类中心数量下,每种情况的聚类质量并作图
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.plot('k')
plt.ylabel('Average Dispersion')
plt.title('Selecting k with the Elbow Method')
plt.show()
原创粉丝点击