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 Timeweb

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

这里写图片描述

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

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

实现上述思想的过程以下:spa

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

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

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

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

k-MC^2 算法有一个缺点,以下:
这里写图片描述ip

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

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

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

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