这篇文章是2014年发表在《Science》上的一篇文章。文章的思想是基于:集群中心的密度高于其周围的点,并且与密度较高的点有相对较大的距离。
二、算法的提出作者在一开始提到了两种传统聚类,基于划分的聚类,基于密度的聚类。
基于划分的聚类以K-means和K-medoids为例,这种算法最大的缺点是不能检测到非球状的簇。基于密度的聚类以DBSCAN为例,它虽然可以计算出任意形状的簇,但是计算量很大。
基于以上两种情况,文章提出通过快速搜索和发现密度峰进行聚类。它基于一种假设:簇中心被局部密度较低的邻域包围,同时这些点距离该聚类中心的距离相比于其他聚类中心来说是最近的。
三、算法介绍对于每一个数据i,给定两个变量:点的局部密度(local density)和该点到具有更高局部密度的点的距离,而这两个值都取决于数据点间的距离。
1、点的局部密度计算点的局部密度定义如下:
其中函数:
上述公式中,表示截断距离,由用户指定。文中给了一个参考方式:选取所有点的相互距离中密度数占数据总数1-2%的值作为截断距离。的选取影响分类,如果太大,最终可能就聚成一类,如果太小,一个中的聚类可能就被分开。
2、相对距离计算(1)非局部密度最大的点:
找到所有局部密度比点高的点,
在这些点中找到距离 最近的那个点,则与的相对距离就是。
(2)局部密度最大的点:
是该点和它周围的所有点距离值的最大值。
(对于上面标灰色的这句话,个人暂时这么理解,因为这么理解才能和图对应起来,但周围的点属于一个概述,也没有具体的范围,个人觉得但这算是一个漏洞吧。在这里我把这部分的原文放到下面,请读者自行理解,欢迎批评指正)
3、找出聚类中心有了前两步的基础,那聚类中心有一个准则:点局部密度大,且相对距离大的点。
以文中的图为例讲解。图A显示了在二维空间中的28个点。我们发现密度最大值出现在第1点和第10点,这是我们确定的聚类中心。图B显示的成为决策图,横轴为点的密度,纵轴为点的距离。第9点和第10点的局部密度值相近,但距离值相差较大。点9属于点1的聚类,而点10密度较高的最近邻居属于另一个聚类。因此,正如预期的那样,只有局部密度高和相对距离高的点是集群中心。第26,27和28点相对距离值较高但局部密度值较低,因为他们是被孤立的,它们可以被认为是由单个点(即离群点)组成的簇。
A中不同的颜色代表不同的类簇。
4、剩余点类别的指派类簇中心找到后,剩余的每个点被归属到距离它本身最近的类簇之中。类簇分配只需一步即可完成,不像其它算法要对目标函数进行迭代优化。
5、类别间边界的确认在该算法中,没有引入噪声截止,而是先算出类别之间的边界,然后找出边界中密度值最高的点的密度作为阈值,只保留前类别中大于或等于此密度值的点。其余的点则作为噪声处理。
如下的图中,选定点为6,而在(1,3,6,7)这四个点中,7的局部密度要比6低,所以会被当作噪声点来处理。



