Kmeans有两个重要的问题:
1、选择K值
k是我们KMEANS算法的关键值;
Spark ml中提供computecost.所有点到其最近的中心点的平方和来评估聚类效果,同样的迭代次数和算法跑的次数,这个值越小代表聚类效果越好
2、初始聚类中心的选择
1)随机模式,会造成聚类的结果和数据的实际分布差距很大
2)k-means++:初始的聚类中心之间的相互聚类要尽可能远
计算步骤如下:
一:从输入的数据点集合中随机选择一个点作为第一个初始点;
二:计算数据集中所有点与最新选择的中心点的距离D(x);
三:选择下一个中心点:p(x)=D(x)2/ED(X)2 使得离前一个中心聚类最远
四:重复二、三步骤,直到K个初始点选择完成
如下图所示:
1、首先分别计算 abced 5个点到聚类1,聚类2的距离
2、由图可知,a、b距离聚类1较近,属于一类,c、d、e距离聚类2较近,属于另外一类
3、由于聚类1、聚类2离这些点的距离比较远,所有计算点a、点b的距离平均值,计算c、d、e的平均值,重新选择2个点作为新的聚类点,如图2
4、按照以上算法进行迭代,最后计算出聚类中心