Science发表的超赞聚类算法

开发 后端 前端 算法
作者(Alex Rodriguez, Alessandro Laio)提出了一种很简洁优美的聚类算法, 可以识别各种形状的类簇, 并且其超参数很容易确定.

作者(Alex Rodriguez, Alessandro Laio)提出了一种很简洁优美的聚类算法, 可以识别各种形状的类簇, 并且其超参数很容易确定.

算法思想

该算法的假设是类簇的中心由一些局部密度比较低的点围绕, 并且这些点距离其他有高局部密度的点的距离都比较大. 首先定义两个值: 局部密度ρi以及到高局部密度点的距离δi:

其中

dc是一个截断距离, 是一个超参数. 所以ρi相当于距离点i的距离小于dc的点的个数. 由于该算法只对ρi的相对值敏感, 所以对dc的选择比较鲁棒, 一种推荐做法是选择dc使得平均每个点的邻居数为所有点的1%-2%.

对于密度***的点, 设置. 注意只有那些密度是局部或者全局***的点才会有远大于正常的相邻点间距.

聚类过程

那些有着比较大的局部密度ρi和很大的δi的点被认为是类簇的中心. 局部密度较小但是δi较大的点是异常点.在确定了类簇中心之后, 所有其他点属于距离其最近的类簇中心所代表的类簇. 图例如下:

左图是所有点在二维空间的分布, 右图是以ρ为横坐标, 以δ为纵坐标, 这种图称作决策图(decision tree). 可以看到, 1和10两个点的ρi和δi都比较大, 作为类簇的中心点. 26, 27, 28三个点的δi也比较大, 但是ρi较小, 所以是异常点.

聚类分析

在聚类分析中, 通常需要确定每个点划分给某个类簇的可靠性. 在该算法中, 可以首先为每个类簇定义一个边界区域(border region), 亦即划分给该类簇但是距离其他类簇的点的距离小于dc的点. 然后为每个类簇找到其边界区域的局部密度***的点, 令其局部密度为ρh. 该类簇中所有局部密度大于ρh的点被认为是类簇核心的一部分(亦即将该点划分给该类簇的可靠性很大), 其余的点被认为是该类簇的光晕(halo), 亦即可以认为是噪音. 图例如下

A图为生成数据的概率分布, B, C二图为分别从该分布中生成了4000, 1000个点. D, E分别是B, C两组数据的决策图(decision tree), 可以看到两组数据都只有五个点有比较大的ρi和很大的δi. 这些点作为类簇的中心, 在确定了类簇的中心之后, 每个点被划分到各个类簇(彩色点), 或者是划分到类簇光晕(黑色点). F图展示的是随着抽样点数量的增多, 聚类的错误率在逐渐下降, 说明该算法是鲁棒的.

***展示一下该算法在各种数据分布上的聚类效果, 非常赞.

参考文献:

[1]. Clustering by fast search and find of density peak. Alex Rodriguez, Alessandro Laio

本文出自:Kemaswill's Blog

责任编辑:林师授 来源: Kemaswill's Blog
相关推荐

2017-05-15 11:10:10

大数据聚类算法

2020-07-09 15:26:18

Python聚类算法语言

2023-10-31 09:00:00

2023-04-02 14:16:45

凸集算法集合

2023-05-10 08:00:00

聚类分析数据分析聚类算法

2020-05-13 15:57:59

聚类分析算法监督学习

2019-10-12 10:11:02

数据集聚类算法

2011-07-26 10:16:14

SQL Server数据挖掘

2011-07-25 15:39:49

SQL SERVER数聚类算法顺序聚类算法

2017-04-07 13:00:49

机器学习大数据聚类算法

2017-04-05 09:20:14

聚类算法机器学习大数据

2022-07-29 10:31:33

算法Python

2022-05-17 09:14:50

聚类算法python

2022-03-03 19:52:25

聚类算法D2CDBSCAN

2011-01-26 15:14:48

jQueryjavascriptWeb

2022-09-07 23:54:17

机器学习无监督学习算法

2023-12-01 16:27:05

机器学习无监督学习

2023-11-26 18:26:26

聚类评价指标监督学习

2018-05-28 15:33:09

无监督学习算法Python

2016-01-25 09:49:20

jQuery图片滑块动画
点赞
收藏

51CTO技术栈公众号