文献阅读笔记——Clustering by fast search and find of density peak

来源:互联网 发布:php java区别 编辑:程序博客网 时间:2024/05/21 06:52

这是近期science上的一篇关于无监督聚类的文章。本文的作者为Alex Rodriguez 和 Alessandro Laio。以下简要介绍下算法的主要思想以及算法分析。

算法思想

该算法的两个重要假设:类簇的中心由一些局部密度比较低的点围绕, 并且这些点距离其他有高局部密度的点的距离都比较大. 

首先定义两个值: 局部密度以及到高局部密度点的距离

样本点局部密度

其中,如果;否则,

是一个截断距离, 是一个参数. 所以相当于距离点i的距离小于的点的个数。文章的实验表明, 的选择比较鲁棒, 文中的推荐值是使得平均每个点的邻居数为样本总数的1%-2%。如果样本点的数量过小即分布过散,可参照mean-shift,采用核密度估计的方法计算每点的局部密度。

样本点到高局部密度点的距离:

由公式可知,为密度高于样本点的样本点到样本点的最近距离。对于密度最大的点,。由定义可知,局部密度最大的点肯定是一个中心点。

聚类过程

计算出所有样本点的局部密度值和到高局部密度点的距离后,可以得到一张决策图。在决策图上挑选出具有较大以及较大的样本点作为类簇中心在确定了类簇中心之后, 其它样本点依据局部密度从高到低依先后顺序确定所属的类别,每个人非中心的样本点的类别为邻域内最近的高于该点样本点的点的样本点所属的类别(重要,如此可满足流形)图例如下:

Screen Shot 2014-06-28 at 下午09.26.59

图 1 聚类过程说明

如图1所示,总共有28个样本点,样本点按密度高低从小到大给以标号,即1~28号点局部密度递减。通过图1右侧的决策图,我们筛选出具有较大以及较大的1号和10号点作为类簇中心,其余点按密度从高到低依次赋予所属类簇标号。如首先为2号点赋值,离2号最近的密度高于2号点的为1,因此将1号点所属标号赋予2号;对于3号点,离3号最近的密度高于3号点的为1,因此将1号点所属标号赋予3号;对于4号点,离4号最近的密度高于4号点的为1,因此将1号点所属标号赋予4号;对于5号点,离5号最近的密度高于4号点的为4,因此将4号点所属标号赋予5号……,如此直至标完所有样本点标号。此外,26, 27, 28三个点的也比较大, 但是较小, 所以是异常点.

聚类分析

聚类分析主要是评估本文算法对参数以及样本分布的鲁棒性。

首先评估样本分布对聚类结果的影响。在聚类分析中, 通常需要确定每个点划分给某个类簇的可靠性. 在该算法中, 可以首先为每个类簇定义一个边界区域(border region), 亦即划分给该类簇但是距离其他类簇的点的距离小于的点. 然后为每个类簇找到其边界区域的局部密度最大的点, 令其局部密度为. 该类簇中所有局部密度大于的点被认为是类簇核心的一部分(亦即将该点划分给该类簇的可靠性很大), 其余的点被认为是该类簇的光晕(halo), 亦即可以认为是噪音. 图例如下 

Screen Shot 2014-06-28 at 下午09.27.11

图2  样本疏密对聚类结果的影响

A图为生成数据的概率分布, B, C二图为分别从该分布中生成了4000, 1000个点. D, E分别是B, C两组数据的决策图, 可以看到两组数据都只有五个点有具有较大以及较大 这些点作为类簇的中心, 在确定了类簇的中心之后, 每个点被划分到各个类簇(彩色点), 或者是划分到类簇光晕(黑色点)。F图展示的是随着抽样点数量的增多, 聚类的错误率在逐渐下降。由图可知当样本数处于1000~10000时,聚类错误率均为1%以下, 说明该算法对数据疏密具有一定的鲁棒性。


图3  阈值对算法的影响

其次评估参数对聚类结果的影响。如图3所示,分别设置的值为0.005、0.001,0.005和0.1。由以上4个不同的值,得到4种聚类结果。观察图3可发现,当的值从0.005变化值0.1时,虽然的值变化了20倍,但是聚类结果在感官上并无大的差异。以上说明,本文算法对阈值具有良好的鲁棒性。

接着评估不同的数据分布对聚类结果的影响。 图4中的4幅子图中的数据都具有较大的聚类难度。其中,图A的难点在于,类的大小不均衡;图B的难度在于类的数量繁多,且高度重合;图C和图D的难度在于各类在特征空间上分布为非球形。一般来讲,在涉及到利用流形分类的算法中,图C和图D都会作为经典的测试数据。由4幅子图的聚类结果容易看出本文算法对数据分布的鲁棒性。

Screen Shot 2014-06-28 at 下午09.27.22

图4  不同的数据分布下的聚类效果展示

最后评估不同度量对聚类结果的影响如图5所示,对图A中的数据做3种非线性映射分别得到B、C和D三种新的数据分布。由A、B、C和D的聚类结果可以看出,本文算法对度量具有好的鲁棒性。

图5  不同的度量对聚类结果的影响


算法总结


本文提出的算法在本质上是基于流形的做法。本文的算法的过程可以总结为:首先搜索合适的局部密度最大点作为类簇中心,然后再将类簇标签从高密度点向低密度点依次传播。


代码

https://gist.github.com/jdeng/d2c538e4cab6dd75bf34

http://www.52ml.net/16351.html#title-1



参考:

[1]. Clustering by fast search and find of density peak. Alex Rodriguez, Alessandro Laio

网址:http://www.52ml.net/16296.html

1 0