K-means++算法是K-means算法的改进,与原算法不通的地方仅在于初始化K个聚类中心上,算法的主要思想如下。
这里主要详细的介绍下Step2中的新的聚类中心选择算法。
假设有如下8样本:
Step1:首先随机选择第一个聚类中心,假设我们选到了6号。
Step2:我们计算剩下的点到6号点的距离,如下,P其中
P
(
x
)
=
D
(
x
)
2
s
u
m
(
D
(
x
)
2
)
P(x) = \frac{D(x)^{2}}{sum(D(x)^{2})}
P(x)=sum(D(x)2)D(x)2
D(x),为样本到聚类中心的距离,Sum 为概率和
D
(
x
)
2
D(x)^{2}
D(x)2越大,对应的概率值越。就相当于一条线段,每个
(
D
(
x
)
)
2
(D(x))^{2}
(D(x))2都是上面的一个子线段,现在随机丢一个东西到这个线段上,那么子线段越长落在该区间的可能性越大,这就是K-means++算法中以概率最大选择初始化聚类中心。
求Sum的原因是,在实际的过程中,我们一般通过轮盘选择法来选择上述中的子线段,具体的操作是:随机选择0-1中的一个数,取其落入的区间即可。
加入现在random的值为0.6,那么新的聚类中心落在(0.525,0.65)这个区间内,则选择样本3作为新的聚类中心。
从上述的图表中我们可以发现,第一个聚类中心6附近的点对应的概率区间都很小,这就使得我们在选择新的样本中心时,会尽可能的选择离上个聚类中心远的点作为新的聚类中心。
个人理解
之所以用概率选择,而不是直接选择距离最远的点作为新的聚类中心,是为了避免噪音点带来的干扰,但是我有点不明白的是,在上述的表中,如果有个噪音点离正常的样本点非常远,那么其对应的概率岂不是非常大,那么被选中的概率也非常大?这里是否有改进分空间,比如根据再某个范围类的样本点的个数给距离加上权重?