python聚类算法kmeans/kmeans++最佳聚类数目选择

K-Means
1、随机选取k个中心
2、计算每个点与之心点距离,将点分配到与其距离最近的中心所在的簇
3、计算每个簇的所有点的平均值,作为下一次中心,更新每个簇的中心
4、重复2、3,直到簇的分配不变

其中一个缺点:随机选取中心,导致每次聚类结果不同

K-Means++
改进:K-MEANS++确定唯一的初始中心,确保初始中心距离尽量远

1、随机选取第一个中心
2、计算每个点到中心的距离Di(x)(与这个点距离最近的中心),计算每个点被选为下一个聚类中心的概率Di(x)2/(D1(x)2/+D2(x)2+……+Dn(x)2),根据轮盘法确定下一个中心。
(轮盘法:随机选取[0,1]之间的数字,例如0.7,如果0.7落在X1点所在的概率区间(0.69,0.71),那么X1被选为下一个聚类中心,即随机数出现的概率和点被选择的概率成正比)
3、重复2,直到选择K个中心
4、正常K-Means步骤

from sklearn.cluster import KMeans`

estimator =KMeans(n_clusters=3,init=“k-means++”)   
estimator.fit(data) 
label_pred = estimator.labels_#聚类标签
centroids = estimator.cluster_centers_#聚类中心

确定聚类数目:
(1)手肘法:
计算sse,sse为类内每个点与类中心的距离之和,取拐点,为最佳聚类数目。
类分的越细致,sse越小
类未达到真实聚类数目时,k增加,会大幅增加聚合程度,每增加一类就会使得sse急剧下降,当达到真实聚类数目后,k的增加对sse影响小(增加聚类数目对聚合程度的贡献小)
(2)轮廓系数
越大越好
计算类内相似度:类内点到其他点的平均距离
计算类间不相似度:一个类的点到其他类的点到平均距离
python聚类算法kmeans/kmeans++最佳聚类数目选择_第1张图片
参考链接:
https://www.cnblogs.com/wang2825/articles/8696830.html
https://www.cnblogs.com/heben/p/7447999.html
https://zhuanlan.zhihu.com/p/32375430
https://www.jianshu.com/p/335b376174d4

你可能感兴趣的:(python,机器学习)