分享

为什么聚类算法经常使用kmeans或者层次聚类?

 昵称11935121 2018-05-15

K-means是机器学习中的一种无监督聚类算法,由于其简单和容易理解,所以是人们最常用的聚类算法之一。


K-means算法要解决的问题是:给定一个样本集合D,将其划分成k类。其解决的思路就是通过找到k个中心点,按照距离各个中心点距离的远近,将样本划分成k类。实际上是最小化如下目标函数,:


其中c表示中心点,x表示样本点。该优化的含义就是找到的k个中心点并划分成k类,使得类内距离最小。接着我们让SSE对c求导并令其为0,就可以得到最优的c值:

通过推倒可以发现,最优的中心点c就是类内所有点的均值。

但是,这就类似于是先有鸡还是先有蛋的问题了。我们是先知道了所有样本的类别,还是先知道所有类别的中心点。如果我们先知道了所有样本的类别,那一定是根据中心点的远近来划分的;但如果我们先知道了所有的中心点,则这些中心点又是划分好的类别内的样本均值。


此外,如果我们不厌其烦的列举出所有可能的类别划分情况,这又是一个NP难问题。因此,K-means利用了贪心的策略,通过迭代优化来近似求解。那就是我们先抛开到底先有谁的问题,先随机设定k个点作为中心点。根据中心点的位置,然后贪心地将距离其最近的样本点归为一类;接着,再求出各个类别中的均值点,作为新的中心点。重复上述过程至一定的次数,就可以达到收敛。


在K-means中,有三部分涉及到需要人为设定。一个就是中心点的初始化;二则是类别数k值的选取;最后还有距离度量方式初始化的不同,会影响到聚类的效果。解决的方法有:一是将初始中心点选取的尽可能远,使得收敛时类间距离能够相对大一些,从而保证聚类质量;二是利用其他聚类方法来初始化,如层次聚类等。

对于低维样本的聚类,我们可以直接看出大致将样本分成几类。但是,在实际中我们往往面对的都是几十维甚至上万维度的数据,已经无法直观的来确定出k值。

这时,就要根据一些聚类度量指标来确定合适的k值。这些指标可以划分成两类:一类是外部指标,也就是将聚类的效果跟某个“参考模型”如专家知识,进行比较;另一类则是内部指标,直接考察聚类结果,而不引入任何的参考模型。内部指标是考虑到了类间距离和类内距离等聚类结果的分布结构。常用的聚类度量指标有DB指数和Dunn指数等。通过判断聚类指标的好坏,就可以选定出合适的k值。

距离的度量方式的选择往往要根据样本做表示的含义来选取。比如在文本聚类中,常用的就是余弦距离;而在对时序数据进行聚类时,往往用的就是相关距离。不同的距离度量方式同样会对聚类效果产生很大影响。因此我们可以通过比较不同度量方式,来选取出最合适的,以达到最优的效果。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多