Fast and Provably Good Seedings for k-means

本文主要介绍关于k-means++改进相关的两篇文章:
1. Fast and Provably Good Seedings for k-means
2. Approximate K-menas++ in Sublinear Time

k-means++ 相对于 k-menas的算法改进主要在于聚类中心的初始化阶段。

Fast and Provably Good Seedings for k-means

如图所示,左边是原始k-means 算法的初始化阶段,原始算随机选择 k 个点作为聚类中心。这种算法一个潜在弊端是选择的初始节点可能落在同一个聚类里面,这是我们不希望看到的。理想的初始化结果是,每个聚类里都有一个初始化的种子节点。

k-means++ 算法就是为了改变原始 k-means 算法的这种缺点。这种算法的核心思想是选取的 k 个种子节点应该尽可能的相互远,如上图右所示。这种想法直觉上比较好(有相应的证明)。

实现上述思想的过程如下:

p(x)=d(x,C)2xXd(x,C)2

这个过程称为 D2sampling , 将候选点到已知种子节点之间的距离作为这个候选节点被选中的概率。距离已知种子节点越远的候选点被选中的概率就越大。

这种算法的时间复杂度为O(nkd),其中 n 是在求 p(x) 分母时,需要遍历整个数据集造成的。

kMC2就是为了降低 *k-*means 算法的时间复杂度的改进算法。
具体做法就是使用MCMC采样来近似 D2sampling 这个过程。在选取候选种子节点时,构造一个长度为m的马尔科夫链,使得马尔科夫链的平稳分布为 p(x) ,从而马尔科夫链达到平稳状态后的那些状态就可以看作是以 p(x) 进行采样的样本点。

k-MC^2 算法有一个缺点,如下:
Fast and Provably Good Seedings for k-means

由于在MCMC过程中,算法使用的提案分布 q(x) 为均匀分布,这导致了潜在的缺点,就是那些样本数较小的聚类中可能不会被选中为候选节点。

为了改进这个缺点,作者又提出了 AFK-MC^2 。这个算法较k-MC^2 的改进在于改变了提案分布 q(x) ,将原来的均匀分布改变为:

q(x)=12d(x,c1)2xXd(x,C)2+12n

这样修改给人的感觉就是给原来的算法加入了一些先验分布信息,从而在选择候选节点时更为准确。从而整个算法的鲁棒性更好。