浅谈K-Means算法

K-means算法

算法思想

首先从N个数据对象中任意选择K个对象作为初始聚类中心,对于所剩下的其它对象则根据它们与这些聚类中心的相似度(用距离来衡量),分别将它们分配给与其最相似的聚类中心所代表的聚类,然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值),不断重复这个过程直到标准测试函数开始收敛为止。测试函数一般采用均方差作为标准测度函数。K个聚类具有以下特点:各个聚类本身尽可能的紧凑,而各个聚类之间尽可能的分开。

算法分析

K-means算法是一种基于样本间相似性度量的间接聚类方法,属于非监督学习方法。由于K-means算法易于描述而且时间效率高,很适合处理大规模数据,已经被应用到自然语言处理等多个领域。在文本聚类领域,K-means算法已经成为基本的算法。但随着算法的深入,该算法的一些不足也暴露出来。主要有:需要预告确定K值,会受到初始聚类中心影响,难以处理分类属性数据以及容易收敛于局部最优解等。
K-means算法的优化分析
1、基于收敛条件的优化
因为K-means算法的收敛条件是通过不断迭代与重新计算聚类中心直至中心收敛,这就有可能导致在这个聚类的内部是已经达到一个很紧密的效果,但是各个聚类间的距离并没有考虑进来,而根据聚类算法的基本思想,聚类算法应该使聚簇内相似度尽可能大,而聚簇间相似度尽可能小的基本原则,所以聚类函数应该综合考虑类内距离与类间距离。为此,产生了改进的K-means算法。在大多数改进算法中都是采用类内紧密性与类间分散性的比值作为收敛函数,这样当收敛函数达到最小值时,类内紧密性和类间分散性都可以达到一个较优值。著名的DBI指数就是基于这种思想,计算类内距离之和与类间距离(聚类中心到所有类中对象的距离)之和的比值来作为收敛函数。
K值的选取优化
和很多聚类算法一样,K-means算法是要预告确定K值,K值的选取很大程度上会影响算法的性能。根据经验规律认为最佳的聚类函数应该在2-LgN之间,其中N为所有数据对象的个数。
1、基于聚类有效性函数的解决方法:
基于聚类有效性函数的解决方法是一种非常简单的方法,通过在2到LgN之间逐个选取K值并利用DBI指数去评价聚类效果。逐个计算距离代价(类内距离的平方加上类间距离的平方)越小的K值就是较优的K值。
2、二分均值聚类的K值决定方法:
首先设定两个阈值:簇类相似度 S1 和簇间相似度S2,首先在所有数据集上运行二分K均值聚类算法,得到两个类C1,C2,考察C1,C2的簇内相似度,若大于阈值S1则继续运行二分K均值算法,不断迭代,直到所有的簇内相似度都小于S1,然后再计算所有簇的簇间相似度,将簇间相似度小于S2的进行合并,最终得到的簇的个数即为K的值。这种方法中最重要的问题是确定S1,S2的值。确定S2的方法是首先计算文本集中两文本之间相似度的均值和标准差,并根本实际应用中的簇内相似度要求给出一个系数,然后利用公司S2=均值+系数*标准差,从而计算出较优的S2,一般S1取0.6*S2效果最好,实验已经证明。
3、X-means算法用于解决K值选定的问题:
首先通过K-means算法得到K个聚类中心,然后对K个聚类中心进行再次聚类,并运用贝叶斯信息标准(BIC)进行判断,如果BIC标准得分更高,则采用新的聚类中心,否则回到原来的聚类,算法经过O(K)的时间就可以找到最优的K值。
适用场景
传统的K-means算法只适用于处理数值属性的数据,而对于分类属性和混合属性数据集则不太适用。对于分类属性数据集可以用K-means的改进版K-models,将分类用数值进行表示,然后再进行聚类分析。

你可能感兴趣的:(算法实现)