这篇文章是自己在上大数据分析课程时老师推荐的一篇文章,当时自己听着也是对原作者当年的的思路新奇非常敬佩,相信很多伙伴也会非常感兴趣,就来做个分享吧。原论文于2014
年发表于Science
期刊杂志上。
- 论文题目:Clustering by fast search and find of density peaks
所解决的问题?
作者提出了一种更加强大的聚类算法,其对参数的依赖更少,泛化能力更强。集成了k-means
和DBSCAN
算法的思想。
背景
在研究问题前,我们先做综述算法分析,看看研究进展,还有未研究问题,需要归纳总结,从实际问题,不同门类的研究问题,发现共性问题。这是科研的基本素养。作者正是基于规划总结各类聚类算法得出一种更强的聚类算法。
如今已有很多聚类的方法,但是这些聚类方法针对很多衡量方式都没有达成一致,也就是缺少一种通用的方式,或者说generalization
不够。k-means
是完全聚类,无法分辨噪声。K
参数选择也比较困难,对于非凸形状也无法处理。DBSCAN
可以聚类任意形状,但是找一个恰当的minpoint
也比较玄学,并且对
ε
\varepsilon
ε参数敏感。
所采用的方法?
聚类的中心点会有什么特征呢?作者提出了两点直观的理解,之后对其量化建模:
- Cluster centers are surrounded by neighbors with lower local density。(聚类的中心周围都是比它密度低的点)。也就是说聚类中心周围密度较低,中心密度较高。
- They are a relatively large distance from any points with a higher local density。(聚类中心点与其它密度更高的点之间通常都距离较远)。
也就是满足这两个点才能成为聚类中心点
因此,对于每个样本点 i i i 计算两个值:
- 局部密度值(
local density
): ρ i \rho_{i} ρi
ρ i = ∑ j χ ( d i j − d c ) \rho_{i}=\sum_{j} \chi\left(d_{i j}-d_{\mathrm{c}}\right) ρi=j∑χ(dij−dc)
其中函数:
χ ( x ) = { 1 , x < 0 0 , x ≥ 0 \chi(x)=\left\{\begin{array}{ll} 1, & x<0 \\ 0, & x \geq 0 \end{array}\right. χ(x)={1,0,x<0x≥0
参数
d
c
>
0
d_{c} > 0
dc>0 为截断距离(cutoff distance
),需要事先指定。
- 距离的定义如下:
δ i = { min j ∈ I S i { d i j } , I S i ≠ ∅ max j ∈ I S { d i j } , I S i = ∅ \delta_{i}=\left\{\begin{array}{ll} \min _{j \in I_{S}^{i}}\left\{d_{i j}\right\}, & I_{S}^{i} \neq \emptyset \\ \max _{j \in I_{S}}\left\{d_{i j}\right\}, & I_{S}^{i}=\emptyset \end{array}\right. δi={minj∈ISi{dij},maxj∈IS{dij},ISi=∅ISi=∅
对于非局部密度最大点,计算距离 δ i \delta_{i} δi实际上分两步 :
- 找到所有局部密度比 i i i点高的点;
- 在这些点中找到距离 i i i点最近的那个点 j j j, i i i和 j j j的距离就是 δ i \delta_{i} δi的值。
对于局部密度最大点, δ i \delta_{i} δi实际上是该点和其他所有点距离值的最大值。
取得的效果?
依据上述决策图进行定性分析,结合主观判断才得到最终的结果。可以看到聚类中心为1和10。26、27、28为离群点(outlier)。
参考链接
论文链接:http://sites.psu.edu/mcnl/files/2017/03/9-2dhti48.pdf
代码实现:https://github.com/lanbing510/DensityPeakCluster
我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!