Fast and Provably Good Seedings for k-means

今天先读了kmeans++的文章,就看了方法,算术证明看不懂直接跳过。该方法很简单明了。

目的:给出一个好的初始中心。

方法:先随机选一个点c,然后计算所有点到这个c的距离存为d(x),然后对这些距离按值分配概率,再用轮盘赌选择法,当然距离越远的选中的概率越大。这样就保证了每次选中的点相互之间都比较远。

官方代码:http://rosettacode.org/wiki/K-means%2B%2B_clustering

不同版本的代码:http://www.jb51.net/article/49395.htm

轮盘赌选择有两种。

一种就是求比例,然后选择。

另一种是:先从我们的数据库随机挑个随机点当“种子点”。

对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。

然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。

参考论文:http://www.docin.com/p-1149852063.html

https://msdn.microsoft.com/en-us/magazine/mt185575?ranMID=24542&ranEAID=TnL5HPStwNw&ranSiteID=TnL5HPStwNw-vGCGjtrRjYj6Tpifq8NqEQ&tduid=(aaf66fdcae19b731622c83e3544403fc)(256380)(2459594)(TnL5HPStwNw-vGCGjtrRjYj6Tpifq8NqEQ)()

Fast and Provably Good Seedings for k-means_第1张图片

然后在此基础上,读了《Fast and Provably Good Seedings for k-means》。这篇文章是在文章《Approximate k-means++ in sublinear time》的基础上改进的。

从速度上予以提高,在准确性上予以提高。

主要原理是利用MCMC,马尔科夫链蒙特卡罗方法。

具体还没看懂。

作者很帅,给了视频和代码,因为代码是python,所以接下来我先看看python怎么运行。


退出python:如果是在Windows命令行中,则按Ctrl+z再按Enter。

安装pip

https://pypi.python.org/pypi/pip#downloads

pip-9.0.1.tar.gz(md5,pgp)

问题:设置完环境变量,path命令出来没有这个路径。

解决:关掉原有的cmd窗口,用管理员身份运行,重新读取一下变量路径就好了,不需要重启。

在cmd中运行 python E:\test\2.py


为了运行minibatch_kmeans


安装scikit-learn

http://www.jianshu.com/p/21b758541825

下载scikit_learn‑0.18.1‑cp27‑cp27m‑win_amd64.whl

27表示python的版本,64表示Windows64位

遇到错误:http://blog.csdn.net/m53931422/article/details/42489897

安装scipy 报错:https://zhidao.baidu.com/question/177420604548204324.html



简要看了下《2016 Nested Mini-Batch K-Means.pdf》

用基于边界的三角不等式的方法来对小批量kmeans进行提速。


todo

把相关软件安装好 看看能否跑通作者给的程序,3个程序。minibatch等

打印文章

你可能感兴趣的:(Fast and Provably Good Seedings for k-means)