今天先读了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》。这篇文章是在文章《Approximate k-means++ in sublinear time》的基础上改进的。
从速度上予以提高,在准确性上予以提高。
主要原理是利用MCMC,马尔科夫链蒙特卡罗方法。
具体还没看懂。
作者很帅,给了视频和代码,因为代码是python,所以接下来我先看看python怎么运行。
退出python:如果是在Windows命令行中,则按Ctrl+z再按Enter。
安装pip
https://pypi.python.org/pypi/pip#downloads
问题:设置完环境变量,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等
打印文章
网友评论