本文主要介绍关于k-means++改进相关的两篇文章:
1. Fast and Provably Good Seedings for k-means
2. Approximate K-menas++ in Sublinear Timeweb
k-means++ 相对于 k-menas的算法改进主要在于聚类中心的初始化阶段。算法
如图所示,左边是原始k-means 算法的初始化阶段,原始算随机选择 k 个点做为聚类中心。这种算法一个潜在弊端是选择的初始节点可能落在同一个聚类里面,这是咱们不但愿看到的。理想的初始化结果是,每一个聚类里都有一个初始化的种子节点。svg
k-means++ 算法就是为了改变原始 k-means 算法的这种缺点。这种算法的核心思想是选取的 k 个种子节点应该尽量的相互远,如上图右所示。这种想法直觉上比较好(有相应的证实)。atom
实现上述思想的过程以下:spa
这个过程称为
这种算法的时间复杂度为
具体作法就是使用MCMC采样来近似
k-MC^2 算法有一个缺点,以下:
ip
因为在MCMC过程当中,算法使用的提案分布 q(x) 为均匀分布,这致使了潜在的缺点,就是那些样本数较小的聚类中可能不会被选中为候选节点。get
为了改进这个缺点,做者又提出了 AFK-MC^2 。这个算法较k-MC^2 的改进在于改变了提案分布 q(x) ,将原来的均匀分布改变为:
这样修改给人的感受就是给原来的算法加入了一些先验分布信息,从而在选择候选节点时更为准确。从而整个算法的鲁棒性更好。