• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

K均值聚类潜在问题

ml admin 2年前 (2016-12-11) 859次浏览 0个评论 扫描二维码

最近项目上使用到 K 均值聚类,但是对于这种无监督聚类方法而言,对于给定的训练样本可能聚类的结果不是我们想要的结果,这就会导致潜在的问题,项目中出现了属于同一类的个数偏少且小于

特征维数,因此计算相应的协方差无法计算的现象,在 Python 的机器学习库 sklearn 中其实已经包含了关于规避 k 均值聚类的一些方法且默认初始化参数例如 kmean++方法,以下记录 K 均值聚类实际存在

的问题供参考

那么 K-means 的缺点是什么呢?
总结为下:
(1)对于离群点和孤立点敏感;
(2)k 值选择;
(3)初始聚类中心的选择;
(4)只能发现球状簇。
对于这 4 点呢的原因,读者可以自行思考下,不难理解。针对上述四个缺点,依次介绍改进措施。

改进 1

首先针对(1),对于离群点和孤立点敏感,如何解决?笔者在前面的一篇博客中,提到过离群点检测的 LOF 算法,通过去除离群点后再聚类,可以减少离群点和孤立点对于聚类效果的影响。

改进 2

k 值的选择问题,在安徽大学李芳的硕士论文中提到了 k-Means 算法的 k 值自适应优化方法。下面将针对该方法进行总结。
首先该算法针对 K-means 算法的以下主要缺点进行了改进:
1)必须首先给出 k(要生成的簇的数目),k 值很难选择。事先并不知道给定的数据应该被分成什么类别才是最优的。
2)初始聚类中心的选择是 K-means 的一个问题。
李芳设计的算法思路是这样的:可以通过在一开始给定一个适合的数值给 k,通过一次 K-means 算法得到一次聚类中心。对于得到的聚类中心,根据得到的 k 个聚类的距离情况,合并距离最近的类,因此聚类中心数减小,当将其用于下次聚类时,相应的聚类数目也减小了,最终得到合适数目的聚类数。可以通过一个评判值 E 来确定聚类数得到一个合适的位置停下来,而不继续合并聚类中心。重复上述循环,直至评判函数收敛为止,最终得到较优聚类数的聚类结果。

李芳. K-Means 算法的 k 值自适应优化方法研究[D]. 安徽大学, 2015.

改进 3

对初始聚类中心的选择的优化。一句话概括为:选择批次距离尽可能远的 K 个点。具体选择步骤如下。

首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出 K 个初始类簇中心点。

对于该问题还有个解决方案。之前我也使用过。熟悉 weka 的同学应该知道 weka 中的聚类有一个算法叫 Canopy 算法。
选用层次聚类或者 Canopy 算法进行初始聚类,然后利用这些类簇的中心点作为 KMeans 算法初始类簇中心点。该方法对于 k 值的选择也是十分有效的。

改进 4

只能获取球状簇的根本原因在于,距离度量的方式。在李荟娆的硕士论文 K_means 聚类方法的改进及其应用中提到了基于 2 种测度的改进,改进后,可以去发现非负、类椭圆形的数据。但是对于这一改进,个人认为,并没有很好的解决 K-means 在这一缺点的问题,如果数据集中有不规则的数据,往往通过基于密度的聚类算法更加适合,比如 DESCAN 算法。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明K 均值聚类潜在问题
喜欢 (0)
admin
关于作者:

您必须 登录 才能发表评论!