DPC聚类算法
2014年,Rodriguez等人在Science杂志发表了基于快速搜索和发现密度峰值的聚类算法(clustering by fast search and find of density peaks, DPC)。该算法可以自动地发现簇中心,然后将数据点分配到不同的簇中。
该算法基于两个基本假设:1)簇中心(密度峰值点)的局部密度大于围绕它的邻居的局部密度;2)不同簇中心之间的距离相对较远。为了找到同时满足这两个条件的簇中心,该算法引入了局部密度的定义。
1. 局部密度
数据集dataset中的数据点 i 具有局部密度性质ρi
基于截断距离的局部密度定义:ρi=∑i=jχ(dij−dc),χ(x)={1,0,x<0x≥0
基于核距离的局部密度定义:ρi=∑i=jexp[−(dcdij)2]
其中:dij是数据点 i 和 j 的欧几里得距离;
dc>0,是自定义的截断距离。即局部区域的定义是以点 i 为圆心,dc为半径的圆形区域。
这两种局部密度定义的主要区别是,二者分别是离散的和连续的。
2. 到更高密度点的最近距离
δi=minj:ρj>ρi(dij)
特殊地,对于局部密度峰值点i,定义δi=maxi=j(δj)
3. 决策值
为了方便地选择簇中心,取ρ和δ的乘积作为决策值加以衡量。
γi=ρi×δi
取决策值γ最大的点作为簇中心。
DPC步骤
- 计算任意两个数据点之间的距离Dn×n={dij}n×n
- 根据截断距离算出任意数据点 xi 的局部密度 ρi
- 对于任意数据点 xi, 计算出 δi
- 以 ρi 为橫轴,以 δi 为纵轴,画出决策图
- 利用决策图,将 ρi 和 δi 都相对较高的点标记为簇中心; 将 ρi 相对较低但是 δi 相对较高的点标记为噪声点
- 将剩余点进行分配。分配时,将每个剩余点分配到它的最近邻且密度比其大的数据点所在的簇。
SNN-DPC算法
Rui.Liu等人发现,当两个簇的密度差异较大时(如经典的聚类数据集Jain),DPC算法选择的两个簇中心往往只位于密度较大簇上。通过改变局部密度的定义(基于共享k近邻点SNN(Shared Nearest Neighbors)的个数计算),来改进效果。
定义Shared Nearest Neighbors
对于数据集中的任意点 i 和 j ,Γ(i)是点 i 的 K个近邻点集合,Γ(j)是点 j 的 K个近邻点集合。
点 i 和点 j 的共享近邻点:SNN(i,j)=Γ(i)∩Γ(j)
定义SNN Similarity
sim(i,j)={∑p∈SNN(i,j)(dip+djp)∣SNN(i,j)∣2,0, if i,j∈SNN(i,j) otherwise
原式可化为∣SNN(i,j)∣×∣SNN(i,j)∣1∑p∈SNN(i,j)(dip+djp)1, 其中:
-
∣SNN(i,j)∣的物理含义是点 i 和点 j 共享近邻点的个数
-
∣SNN(i,j)∣1∑p∈SNN(i,j)(dip+djp)的物理含义是点 i 和点 j 到他们的所有共享近邻点的距离的平均值
定义SNN局部密度
定义点 i 为数据集中的任意一点,L(i)={x1,x2,…,xk}是与点 i 的SNN Similarity最高的 k 个点。
SNN局部定义为:ρi=∑j∈L(i)sim(i,j)
在这种定义下,局部密度不仅包含了距离信息,而且还通过许多SNN,包含了集群结构的信息
定义到更高密度点的最近距离
δi=minj:ρj>ρi[dij(∑p∈Γ(i)dip+∑q∈Γ(j)djq)],注意这里的dij和(∑p∈Γ(i)dip+∑q∈Γ(j)djq)是相乘的关系,因为我们定义局部密度时,使用的距离定义有所改变。
特别的,局部密度最大值点的δi=maxj∈(X−i)(δj)
定义决策值
类似的,决策值γi=ρi×δi
定义剩余点分配步骤中的绝对下属点和可能下属点
假设点 A 已经被分配到某个簇 c 中,点 B 尚未被分配:
若∣SNN(A,B)∣≥k/2,则称点 B 是簇 c 的绝对下属点,也就是说点 B 也一定会被分配到簇 c 中。
若0<∣SNN(A,B)∣<k/2,则称点 B 是簇 c 的可能下属点,点 B 可以是其他簇的下属点。
在极端情况下,假设点 B 同时满足
∣SNN(A1,B)∣=k/2
∣SNN(A2,B)∣=k/2,可以暂时将 k 加一,使其成为奇数
SNN-DPC步骤
- 计算任意两个数据点之间的距离Dn×n={dij}n×n
- 根据定义计算任意数据点的 SNN Similarity
- 算出任意数据点 xi 的局部密度 ρi
- 对于任意数据点 xi, 计算出 δi
- 以 ρi 为橫轴,以 δi 为纵轴,画出决策图。或者以 i 为橫轴,以 γi 为纵轴画出决策图
- 利用决策图,将 ρi 和 δi 都相对较高的点标记为簇中心; 或者将γi较大的点作为簇中心
- 将剩余点中的绝对下属点进行分配。
- 将剩余点中的可能下属点进行分配。