要解决的问题
kmeans算法存在的一个问题是初始中心的选取是随机的,造成聚类的结果也是随机的,一般的做法是进行多次重复整个聚类过程,然后选取聚类效果好的。Kmeans++算法可以很好的解决初始点的选取问题,本文简单进行了总结和实现,代码方面还有很多不完善的地方,仅供参考,欢迎拍砖。
算法流程
a). 首先从数据集中随机选取一个点作为中心点,并加入到中心点集合centers中
b). 对于数据集中的每个点i,都和集合centers中的点进行计算,得到最近距离d[i],计算完之后得到sum(d[i])
c). 取一个随机值random,使random落在sum(d[i])内,然后random -= d[i] 直到random < 0的时候,这个i即为下一个中心点,将这个点加入到centers中