[paper]关于K-means变种的论文阅读
(原始)K-means的几个主要问题如下:
-
聚类个数需要人工指定
-
依赖初始中心点(seeding)的选择
-
时间复杂度高
k-means++是一种基于采样方法(称为D^2-sampling)的中心点选择方法,想法是:初始中心点尽可能远离。具体做法是:随机选择第一个初始中心点,计算其他点与该中心点的距离,按照距离远的以较大的概率被选中来选择第二个初始中心点,按照上述过程,顺次选择第三个,第四个,第K个(K为聚类个数)初始中心点。
从直觉上来看,这种想法是和聚类的目标保持一致,类内样本距离小,类间样本距离大。这种方法在一定意义上可以得出好的seedings,有助于问题2的解决。
附上原始文献:《k-means++: The Advantages of Careful Seeding》
很显然,上述方法在选择seeding的时候本来就是个计算量大的任务。为此有人提出基于MCMC的采样方法,具体做法是:随机选取一个seeding,然后用MCMC的方法采样出长为M的数列,取最后(K-1)个数作为中心点,target distribution是距离的函数,满足距离越远,概率越大(表达的含义同k-means++),proposal distribution是一个常函数,1/样本数。
关于时间复杂度的表述,见原始文献(AAAI):《Approximate K-Means++ in Sublinear Time》
是不是觉得上述的proposal distribution很特别(均匀分布)?上述的作者们换了这个proposal distribution,将与距离有关的分布作为一个term加入原始的分布中,据文章描述,这个提高了聚类的鲁棒性,也就是可以适应更多的数据分布假设,而非原来的一种均匀分布(严格地说是产生数据的分布)。
附上原始文献(NIPS):《Fast and Provably Good Seedings for k-Means》
是不是觉得,这个自己也可以做?(不但要实验证明,还要有理论上的分析)从原始文章中看到,proposal distribution中关于距离的term和样本数目的term前的weight是1/2,会不会有些新的想法出现?此外,能否找到其他的采样分布进一步降低时间复杂度的同时,具有较好的鲁棒性?
我还没有进一步follow的想法。
附(我运行了AFK-MC2的源码,也就是NIPS中提到的算法):
AFK-MC2源码运行配置
安装Cython模块:
pip install cython
Cython解释器(生成kmc2.c文件):
cython kmc2.pyx
编译(.c)文件:
sudo python setup.py build
安装(.c)文件:
sudo python setup.py install
使用:
import kmc2
参考:
1.LDA-math-MCMC和Gibbs Sampling
这篇文章讲了MCMC->MH->Gibbs的发展历程,同时谈了算法背后的直觉。文章存在明显的笔误。
2.MCMC
概率转移矩阵是如何和一个对称分布对应的? 参考[6]
3.MH
4.Gibbs
上述三篇是null的CSDN博客,很棒的博客。
回顾了几种典型的采样算法。
6.MCMC: The Metropolis Sampler
解释了为什么需要使用对称分布去产生新的样本(状态)。
7.蒙特卡罗积分
举了一个比较详细的例子说明蒙特卡罗积分方法。
pluskid的博客文章,思考很有深度,读起来很爽。
9.K-MC2
台湾人民的论文笔记
10.fast-and-provably-good-seedings-for-k-means
中国人民的论文笔记