一种基于密度峰值的聚类算法

一种基于密度峰值的聚类算法

1.引入

2014年Science刊发了一篇标题为Clustering by fast search and find of density peaks的文章,文章中介绍了一种基于密度峰值的聚类算法。
传统的聚类算法k-means,通常不适用于非球形的簇。这里所谓的球形簇是根据k-means算法基本原理得到的。为了解释这个所谓的球形簇,在这里简单的回忆一下k-means算法。k-means算法的基本原理就是距离近的应该被分到一个类别。因此我们可以说,k-means其实是基于距离的聚类算法。在算法开始之前,我们需要指定聚类的类别个数k的值,指定完k值之后需要初始化聚类的中心点,然后计算要聚类点与中心点的聚类,取离其最近的中心点为该点所属类别的中心点,直到所有的点都分完类。然后,对于每个类,用每个类所有点的均值作为新的中心点,继续聚类算法,直到迭代到了指定的轮数,或者所有类别的中心点固定了。从k-means算法的执行过程,我们可以看到,如果同类点的分布不是球状,k-means算法便无能为力。
而本文提出的基于密度峰值的算法则可以解决k-means的不适用于非球状簇分类的问题。同时,本文提出的方法不需要指定类别的数量。

2.基于密度峰值聚类算法的基本思想

基于密度峰值聚类算法的基本思想与基于密度算法DBSCAN的基本思想类似,都是通过某个点周围的点来判断某个点是不是属于某个类。而不同于基于密度算法DBSCAN的通过密度直达、密度可达、密度相连三种基本关系判断两个点是否属于同类的思想,基于密度峰值聚类算法的思想要简单的多。对于每个类的中心点,基于密度峰值聚类算法认为,中心点周围的点相比较该类的其他点都要多,同时,本类的中心点应该距离其他类中心点要足够远。

3.算法的具体介绍

1. 局部密度

在这里插入图片描述
一种基于密度峰值的聚类算法_第1张图片
在这里插入图片描述

2. 距离

δ i = { m i n ( d i j ) , s . t .   ρ j > ρ i m a x ( d i j ) , s . t .   ρ j ≤ ρ i \delta _i= \left \{\begin{array}{cc} min(d_{ij}), &s.t. \ \rho_j>\rho_i\\ max(d_{ij}),&s.t.\ \rho_j\leq\rho_i \end{array}\right. δi={min(dij),max(dij),s.t. ρj>ρis.t. ρjρi
这里面需要解释:当点的密度不是最大的时候,说明该点并不是中心点,于是将距离设定为它与离它最近点的距离,当点的密度是最大的时候,说明该点是中心点,于是将该点所对应的距离设为它与离它最远的点的距离。至于为什么这么设置,可以看一个简单的应用。

3.算法的实施过程

一种基于密度峰值的聚类算法_第2张图片
对于A图中的点分别计算每个点的局部密度和距离,绘制成图B。在图B中我们可以看到点1和点10具有最大的局部密度和最大的距离,因此将点1和点10认定为簇的中心点。那么上面的问题就解决了,之所以如此设定是为了让簇的中心点显得更加“与众不同”,也就是说当两个点都具有相同的局部密度的时候,我们选择具有较大距离的点作为我们的中心点。
这种算法有个明显的特点,就是我们不需要迭代就可以将数据划分为合适的簇,而且,不像k-means算法,我们不需要实现指定k的值和中心点,相比较k-means算法开始之前的经验成分会少一点。这里为什么一定要强调算法开始之前的经验成分,因为基于密度峰值算法的选取中心点的时候同样带有一定的主观色彩。这也是这个算法的致命缺点。

4.关于算法的一点点改进

文中,作者引入一个度量中心点的参数 γ i = ρ i δ i \gamma_i=\rho_i\delta_i γi=ρiδi,作者认为如果一个点具有较大的 γ \gamma γ值,那么这个点便有较大的可能是中心点。
一种基于密度峰值的聚类算法_第3张图片
上面的B图将所有点的 γ \gamma γ值做了排序并绘制到坐标系中。可以看到中心点与非中心的 γ \gamma γ值有明显的分界。因此 γ \gamma γ值可以作为中心点和非中心点的分类依据

你可能感兴趣的:(机器学习)