论文题目:X-means:Extending K-means with Efficient Estimation of the Number of Clusters
论文地址:http://cs.uef.fi/~zhao/Courses/Clustering2012/Xmeans.pdf
论文大体内容:
针对K-means的一些缺点,本文提出了K-means的拓展版——X-means聚类算法,能比K-means更快。
1、K-means有三大缺点:①计算花费大;②K需要人为指定;③容易导致局部极小化。因此本文提出了X-means算法以解决①②的问题,并改进③的问题。
2、X-means使用了三个改进:①使用kd-tree加速原K-means的每一轮迭代;②用户指定K所属的范围,根据BIC score选到最优K;③每一轮迭代只进行2-means(2-means对局部最优解不敏感)。[1]
3、X-means的详细过程:
①从一个聚类中心点开始;
②对当前所有的聚类中心点,找每一类的两个相对较远的点作初始中心点,然后对当前类跑一次K-means(K=2);
③计算分裂前与分裂后的BIC Score(BIC Score越大越好),以此决定保留分裂前的状态还是分裂后的状态;
④回到②进行迭代,如果两次结果(中心点数量)一样,则结束。
4、经过实验,X-means的速度是枚举K的K-means算法的2到8倍,能有效的缩短计算时间。
5、思考:通过本文可以看出,有挺多时候,X-means相比于暴力枚举K-means中的K,结果有一点不如人意,也就算法的效率比较高。但如果直接二分去遍历K-means的K,那说不定也会比X-means的结果要好,效率要高。因此,我认为聚类的时候,如果类数目比较少,那么就直接枚举K值跑K-means;如果类数目比较大时,二分K值跑K-means,或者X-means都可以试试。
6、扩展:K-means++算法:由于K-means的结果与初始的聚类中心位置有很大的关系,所以K-means++的算法思想就是:初始的聚类中心之间的相互距离要尽可能的远。[2]
详细步骤如下:
①从输入的数据点集合中随机选择一个点作为第一个聚类中心;
②对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);
③选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大,可使用轮盘算法来进行选择;
④重复②和③直到k个聚类中心被选出来;
⑤利用这k个初始的聚类中心来运行标准的k-means算法。
参考资料:
1、http://www.cnblogs.com/porco/p/xmeans_intro.html
2、http://www.cnblogs.com/shelocks/archive/2012/12/20/2826787.html
以上均为个人见解,因本人水平有限,如发现有所错漏,敬请指出,谢谢!
论文地址:http://cs.uef.fi/~zhao/Courses/Clustering2012/Xmeans.pdf
论文大体内容:
针对K-means的一些缺点,本文提出了K-means的拓展版——X-means聚类算法,能比K-means更快。
1、K-means有三大缺点:①计算花费大;②K需要人为指定;③容易导致局部极小化。因此本文提出了X-means算法以解决①②的问题,并改进③的问题。
2、X-means使用了三个改进:①使用kd-tree加速原K-means的每一轮迭代;②用户指定K所属的范围,根据BIC score选到最优K;③每一轮迭代只进行2-means(2-means对局部最优解不敏感)。[1]
3、X-means的详细过程:
①从一个聚类中心点开始;
②对当前所有的聚类中心点,找每一类的两个相对较远的点作初始中心点,然后对当前类跑一次K-means(K=2);
③计算分裂前与分裂后的BIC Score(BIC Score越大越好),以此决定保留分裂前的状态还是分裂后的状态;
④回到②进行迭代,如果两次结果(中心点数量)一样,则结束。
4、经过实验,X-means的速度是枚举K的K-means算法的2到8倍,能有效的缩短计算时间。
5、思考:通过本文可以看出,有挺多时候,X-means相比于暴力枚举K-means中的K,结果有一点不如人意,也就算法的效率比较高。但如果直接二分去遍历K-means的K,那说不定也会比X-means的结果要好,效率要高。因此,我认为聚类的时候,如果类数目比较少,那么就直接枚举K值跑K-means;如果类数目比较大时,二分K值跑K-means,或者X-means都可以试试。
6、扩展:K-means++算法:由于K-means的结果与初始的聚类中心位置有很大的关系,所以K-means++的算法思想就是:初始的聚类中心之间的相互距离要尽可能的远。[2]
详细步骤如下:
①从输入的数据点集合中随机选择一个点作为第一个聚类中心;
②对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x);
③选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大,可使用轮盘算法来进行选择;
④重复②和③直到k个聚类中心被选出来;
⑤利用这k个初始的聚类中心来运行标准的k-means算法。
参考资料:
1、http://www.cnblogs.com/porco/p/xmeans_intro.html
2、http://www.cnblogs.com/shelocks/archive/2012/12/20/2826787.html
以上均为个人见解,因本人水平有限,如发现有所错漏,敬请指出,谢谢!