Science14年的聚类论文——Clustering by fast search and find of density peaks

这是一个比较新的聚类方法(文章中没看见作者对其取名,在这里我姑且称该方法为local density clustering,LDC),在聚类这个古老的主题上似乎最近一些年的突破不大,这篇文章算是很好的了,方法让人很有启发(醍醐灌顶),并且是发表在Science上,受到的关注自然非常大。

本文的核心亮点:1是用比较新颖的方法来确定聚类中心,2是采用距离的local density来进行聚类的划分。在这两点中,常见的Kmeans算法采用的方法是:用每一类的均值作为中点,用距离的最近的点来确定聚类划分。下面对LDC方法进行描述。

首先来讲一下聚类中心,什么样的点才是好的聚类中心呢?作者认为需要满足下面两点:

1、样本点本身的密度大,即它周围点的密度应该小于它;

2、和比它密度更大的点之间的距离应该尽可能的大;

定义每个样本点的(1)局部密度函数,采用cut-off kernel:

ρi=∑j∈IS?{i}χ(dij?dc)

其中

χ(a)={1,0,a<0a>=0

dc是截断距离(cutoff distance),是预先设定的一个值,dij表示点i和j之间的距离,可以用任意距离计算公式计算;IS表示数据集中所有样本点的标号集合;很明显,这个局部密度函数是一个离散的函数,它的含义是所有样本点中(不含i点)和i点距离在dc之内的样本点的数量。当然也可以采用连续的函数来定义局部密度,如采用Gaussian Kernel:

ρi=∑j∈IS?{i}exp(?dijdc)2

Ok,不管采用离散的还是连续的,我们已经得到了局部密度;再定义每个样本点的距离δi,为了避免和距离计算的混淆,我这里称之为(2)距离偏量:

δi=?????minj:ρj>ρi(dij)maxj(dij)i不是密度最大的点i是密度最大的点

很明显,i点的距离偏量的含义是,所有局部密度大于i点的样本点到i点的距离的最小值;单是对密度最大的那个点单独处理一下,其距离偏量为所有两两点之间距离的最大值(其实这个最大值的数值本身并不重要,只是为了使得这个密度最大点的距离偏量也是最大的,使得它会被选为聚类中心之一)。上面的定义有一个小处定义的不是很周到,就是对于密度相同的点,距离到底是计算还是不计算?因此可以在计算完局部密度以后,可以对所有点的局部密度进行降序排序,这样相同密度的点也会有个先后顺序,而对于i点来说,密度比它大的点就是那些排序在它前面的点,包括了和它密度相同的点[2]。

好,接下来看paper中的这个例子,下面左图是数据样本的分布,其中样本点的标号是根据局部密度降序排序的。右图是将每个点的局部密度和距离偏移绘制出来的结果,可以看到1和10号点脱颖而出,因此聚类的时候把他们作为两类聚类的中心。

这种聚类中心的判断主要还是通过人眼来看的,这一点有一些麻烦,也不是很普适。在文献[1]作者提到,可以用一种综合性的指标γi=ρi×δi来判断,γi大的点被选为中心点,因此对所有的γi降序排序取前K个点作为聚类中心点,具体取多大的K,可以观察下图找到分割点(具体内容需要参看文献[1]的补充资料):

OK,介绍完如何选取聚类中心,接下来记录一下如何做聚类的过程。前面我们提到,已经有一个关于样本点局部密度的降序排列,在确定完中心点后,对余下的点,我们依次做下面的操作:

对于未标记聚类类别的点a,找到密度比它大的点中和它距离最近的那个点c,把c点的类别标号赋给a点。根据局部密度的降序依次给所有样本点进行类别赋值,就可以一遍得到所有样本点的聚类结果。下图(来自于[3])简单说明了这个过程,先确定了点1和2为中心,然后点3(找到点1)标记为聚类1,点4(找到点3)也标记为聚类1。可以看到,聚类这个过程是一个扫描一遍的过程,是线性的。

当然,本方法还有一点是有区别于其他聚类方法的,它还做了outlier的过滤。在前面第一幅图中,26-28三个点被认为是outlier。具体的思路是这样的,首先对每一个cluster中的点,分为cluster core点和cluster halo点,halo点是最终要被排除的。需要先确定每个cluster的边界区域,边界区域由cluster中这样性质的数据点构成——它们的距离为dc的邻域内,存在着其他cluster的点。计算这样跨cluster的点对(记为i和j,i为本cluster内部的点)的平均局部密度ρˉ=12(ρi+ρj),并取一个cluster的所有存在的跨cluster点对的平均局部密度的最大值作为该cluster的平均局部密度上界;然后对所有样本点进行一次标记,如果一个样本点的局部密度小于它所在类别的平均局部密度上界,则被标记为halo点,否则标记为core点;halo点是被抛弃的离群点。看下面这个示意图[3]:

一开始点1,3,6,7都被标记为cluster 1,点6确定了cluster 1的边界区域,并计算出了该类的平均局部密度上界(通过6-5和6-4),由于点7的局部密度小于该平均局部密度上界,被标记为halo点,排除在cluster 1之外。

OK,到这里就讲完了聚类过程的核心过程思想了,但是整个程序的执行还有很多小的细节点,比如如何确定dc?作者提出的方法是经验性的,设定为所有点的相互距离中由小到大排列占总数2%位置的距离数值。当然,这个2%也是经验性质的,事实上该数值的选取是非常影响算法最终的结果的,太大太小都不行,大概2%在作者测试的data set里面还算不错。这样通过data depended的方法来选取dc相对来说比直接设定一个具体的数值来的鲁棒性更好一些。

下面来看一下实验结果(看起来肯定是很棒的啦,所有的聚类paper都号称自己方法可以做到很好的效果,不过实际上最重要的是鲁棒性以及参数调节难度低,对用户来说参数调节最好自动或者没有/很少参数,这也是为什么kmeans算法依然在实际应用中使用的最多的原因——使用方便)

下图是一个非球形类分布图,同时加入黑色噪音点后,A图为类的概率分布,B、C图为4000个和1000个样本点,E和F生成的每个点对应的ρ和δ的函数图,可以明显看出类别中心及个数。F图为随着样本点的增加,错误指派点的比率[3]。

以下是使用该算法在其他数据集上进行聚类的效果图

下面是算法执行流程,在这里收录一下[2],:

参考资料

[1] Alex Rodriguez and Alessandro Laio. Clustering by fast search and find of density peaks, Science 344, 1492 (2014);

[2] http://blog.csdn.net/itplus/article/details/38926837

[3] http://blog.csdn.net/lvxiong1990/article/details/40540065

时间: 2024-10-05 04:59:27

Science14年的聚类论文——Clustering by fast search and find of density peaks的相关文章

Science论文&quot;Clustering by fast search and find of density peaks&quot;学习笔记

"Clustering by fast search and find of density peaks"是今年6月份在<Science>期刊上发表的的一篇论文,论文中提出了一种非常巧妙的聚类算法.经过几天的努力,终于用python实现了文中的算法,下面与大家分享一下自己对算法的理解及实现过程中遇到的问题和解决办法. 首先,该算法是基于这样的假设:类簇中心被具有较低局部密度的邻居点包围,且与具有更高密度的任何点有相对较大的距离.对于每一个数据点,要计算两个量:点的局部密度和

Clustering by fast search and find of density peaks代码详解

 发表在2014年Science上的聚类方法Clustering by fast search and find of density peaks,不在这赘述介绍了,其matlab代码详细注释下面给出,如果想看该方法的详细解释说明,推荐在阅读原文的基础上,参考这位博主的博文 http://blog.csdn.net/itplus/article/details/38926837 本文版权所有  转载请注明出处 http://blog.csdn.net/mxlmhgzw 无法看清的,请见我博客

Clustering by fast search and find of density peaks

"Clustering by fast search and find of density peaks"是20114年6月份在<Science>期刊上发表的的一篇论文,论文中提出了一种非常巧妙的聚类算法. 首先,该算法是基于这样的假设: (1)聚类中心密度要高 (2)高密度中心点之间的距离应该相对远一些. 异常点都会被排除,同时也和形状无关. 首先,这种方法不像原先的Kmeans那样随机初始种子点然后迭代,它是根据样本的密度峰值来确定聚类中心的,当然聚类中心确定之后,后面

Hadoop实现Clustering by fast search and find of density peaks

Hadoop实现Clustering by fast search and find of density peaks 本篇博客参考:Clustering by fast search and find of density peaks论文以及http://www.cnblogs.com/peghoty/p/3945653.html. Hadoop版本:2.6.0,Myeclipse:10.0 代码可在https://github.com/fansy1990/fast_cluster下载. 1.

Hadoop实现Clustering by fast search and find of density peaks (2)

本篇博客参考:Clustering by fast search and find of density peaks论文以及http://www.cnblogs.com/peghoty/p/3945653.html. 使用版本: Hadoop版本:2.6.0,Myeclipse:10.0 本地集群情况: node101  (主节点,namenode,datanode,ResourceManager,NodeManager,SecondaryNamenode,3.7G,2核) node102  (

一种新型聚类算法(Clustering by fast search and find of density peaksd)

最近在学习论文的时候发现了在science上发表的关于新型的基于密度的聚类算法 Kmean算法有很多不足的地方,比如k值的确定,初始结点选择,而且还不能检测费球面类别的数据分布,对于第二个问题,提出了Kmean++,而其他不足还没有解决,dbscan虽然可以对任意形状分布的进行聚类,但是必须指定一个密度阈值,从而去除低于此密度阈值的噪音点,这篇文章解决了这些不足. 本文提出的聚类算法的核心思想在于,对聚类中心的刻画上,而且认为聚类中心同时具有以下两种特点: 本身的密度大,即它被密度均不超过它的邻

笔记Clustering by fast search and find of density peaks

We propose an approach based on the idea that cluster centers are characterizedby a higher density than their neighbors and by a relatively large distance from points withhigher densities. This idea forms the basis of a clustering procedure in which

Clustering by fast search and find of desity peaks(基于快速搜索与寻找密度峰值的聚类)

基于快速搜索与寻找密度峰值的聚类(Alex Rodriguez and Alessandro Laio) 摘要:聚类分析目的是基于元素之间的相似度对其进行分类,应用范围从天文学到生物信息学.文献计量学到模式识别.我们提出一种方法,思想基于簇中心具有比其邻居更大密度的特点以及与更大密度点之间有一个相对较大的距离(1.簇中心点有相对高的密度 2.簇中心点之间距离一般较大,即不同类别之间一般距离较远),这种思想形成了簇数目直观出现的聚类机制的基础,自动发现和排除异常点,同时在识别簇时,不用关心其形状和

cluster by fast search and find of density peaks

This paper proposed a new cluster idea. The idea is that the cluster center is characterrized by a higher density than their neighbors and by a relatively large distance from points with highter density(1.一个类中的聚类中心的点的密度较高,2.不同聚类中心的距离较大). Based on thi