1.算法的基本概念
-
全称:
Density-Based Spatial Clustering of Applications with Noise
-
属性概念
属性 概念 核心对象 若某个点的密度达到算法设定的阈值则其为核心点。(即 r 邻域内点的数量不小于 number个数量) 边界点 属于某一个类的非核心点,不能在与下一个点密度相连【属于一类的最边界的点,离核心点最远】 ϵ-邻域的距离阈值 设定的半径r 密度相连 若从某核心点q出发,点q和点k都是密度可达的 ,则称点q和点k是密度相连的。 直接密度可达 若某点p在点q(q是核心点)的 r 邻域内,则p-q直接密度可达。 密度可达 若有一个点的序列 q 0 、 q 1 、 … q k q^0、q^1、…q^k q0、q1、…qk,对任意 q i − q i − 1 q^i-q^{i-1} qi−qi−1是直接密度可达,则称从 q 0 q^0 q0到 q k q^k qk密度可达,称为直接密度可达的“传播”。 噪声点 不属于任何一个类簇的点,从任何一个核心点出发都是密度不可达【不能分类到任何一个簇】,即此算法可以对数据进行异常值检测
2. 算法操作步骤
- 输入相关参数
- 参数D:输入数据集
- 参数ϵ:指定半径
MinPts
:密度阈值
- 迭代步骤
- 将所有数据点标记为(未被访问)
While:
- 随机选择一个未被访问点
p
,并且标记为已访问,if p
的ϵ-领域内点的数量>
领域值MinPts- 创建一个新簇
C
,并且把p
添加到簇C
中 - 令
N
为p
的ϵ-领域内点对象集合 - 遍历
N
中的每个点x
,如果点x
未被访问,将x
访问 if x
的ϵ-领域内点的数量>
MinPts的值- 把
x
的所有ϵ-领域内点添加到N
中 if x
不是任何簇的成员,将x
添加到C
中
- 把
- 得到一个簇
C
- 创建一个新簇
- 再次循环的获得新簇
- 随机选择一个未被访问点
3.算法的参数选择
参数 | 含义 |
---|---|
半径r | 可以根据K距离来设定:找突变点 |
K距离 | 给定数据集P={p(i); i=0,1,…n} ,计算点P(i) 到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。 |
MinPts | k-距离中k的值,一般取的小一些,多次尝试 |
4.算法的优点与缺点
-
优点:
-
不需要指定簇个数
-
可以发现任意形状的簇
-
擅长找到离群点(检测任务)
-
超参数较少, 两个参数就够了
-
-
缺点:
- 高维数据有些困难(可以做降维)
- 参数难以选择(参数对结果的影响非常大)
Sklearn
中效率很慢(数据削减策略)- DBSCAN算法可视化链接