今天爱分享给大家带来k-means算法的优、缺点有哪些【详细讲解】,希望能够帮助到大家。
1、优点:
①简单、高效、易于理解
②聚类效果好
2、缺点:
①算法可能找到局部最优的聚类,而不是全局最优的聚类。使用改进的二分k-means算法。
二分k-means算法:首先将整个数据集看成一个簇,然后进行一次k-means(k=2)算法将该簇一分为二,并计算每个簇的误差平方和,选择平方和最大的簇迭代上述过程再次一分为二,直至簇数达到用户指定的k为止,此时可以达到的全局最优。
②算法的结果非常依赖于初始随机选择的聚类中心的位置,可以通过多次执行该算法来减少初始中心敏感的影响。
方法1:选择彼此距离尽可能远的k个点作为初始簇中心。
方法2:先使用canopy算法进行初始聚类,得到k个canopy中心,以此或距离每个canopy中心最近的点作为初始簇中心。
Canopy算法:首先给定两个距离T1和T2,T1>T2。从数据集中随机有放回地选择一个点作为一个canopy中心,对于剩余数据集中的每个点计算其与每个canopy中心的距离,若距离小于T1,则将该点加入该canopy中;若距离小于T2,则将其加入该canopy的同时,从数据集中删除该点,迭代上述过程,直至数据集为空为止。
canopy算法会得到若干个canopy,可以认为每个canopy都是一个簇,只是数据集中的点可能同时属于多个不同的canopy,可以先用canopy算法进行粗聚类,得到k值和k个初始簇中心后再使用k-means算法进行细聚类。
③聚类结果对k值的依赖性比较大。目前并没有一个通用的理论来确定这个k值。一个简单常用的方法是:
从一个起始值开始到一个最大值,每一个值运行k-means算法聚类,通过一个评价函数计算出最好的一次聚类结果,这个k就是最优的k。
k-means算法的k值自适应优化算法:首先给定一个较大的k值,进行一次k-means算法得到k个簇中心,然后计算每两个簇中心之间的距离,合并簇中心距离最近的两个簇,并将k值减1,迭代上述过程,直至簇类结果(整个数据集的误差平方和)不变或者变化小于某个阈值或者达到指定迭代次数为止。
④可能发生距离聚类中心最近的样本集为空的情况,因此这个聚类中心不变无法得到更新。
⑤对离群点和孤立点敏感。通过LOF(局部离群因子)检测算法对数据集进行预处理,去除离群点后再进行聚类。
⑥性能问题。原始的k-means算法,每一次迭代都要计算每一个观测点与所有聚类中心的距离,当观测点的数目很多时,算法的性能并不理想。时间复杂度为O(nkl),l为迭代次数,n为数据集容量。为了解决这一问题,我们可以使用kd树以及ball 树(数据结构)来提高k-means算法的效率。