k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。
算法步骤如下
1.从输入的数据点集合中随机选择一个点作为第一个聚类中心
2.对于数据集中的每一个点x,计算它与聚类中心(指已选择的聚类中心)的距离D(x),并将D(x)求和。
3.选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
4.重复2和3直到k个聚类中心被选出来
算法步骤如下
1.从输入的数据点集合中随机选择一个点作为第一个聚类中心
2.对于数据集中的每一个点x,计算它与聚类中心(指已选择的聚类中心)的距离D(x),并将D(x)求和。
3.选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
4.重复2和3直到k个聚类中心被选出来
利用这k个初始的聚类中心来运行标准的k-means算法
其中对第三步可以这样理解,为了选择一个新的数据点,我们要先去一个随机值,该值必须小于Sum(D(x))。可以先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。Random可以这样计算 Random = Sum(D(x)) * 乘以0至1之间的一个小数。之所以取一个能落在Sum(D(x))中是值是因为,Random是随机的,那么他有更大的机率落在D(x)值较大的区域里。如下图,Random有更大的机率落在D(x3)中。
注意这里的减运算为累减操作,每减一次,Random就会变小。
Random -= D(x) 的意义在于找出 当前Random到底落在了哪个区间。
这样就可以选择出k个初始值点