基本概念(Density-Based Spatial Clusting of Applications with Noise)
核心对象:若某个点的密度达到算法设定的阈值则其为核心点。(即r邻域内点的数量不小于minPts)
ε-邻域的距离阈值:设定的半径r
直接密度可达:若某点p在点q的r邻域内,且q是核心点则p-q直接密度可达。
密度可达:若有一个点的序列q0、q1、....qk,对任意的qi->qi-1是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的“传播”。
密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连的。
边界点:属于某一个类的非核心点,不能发展下线了
直接密度可达:若某点p在点q的r邻域内,且q是核心点则p-q直接密度可达。
噪声点:不属于任何一个簇类的点,从任何一个核心点出发都是密度不可达的
A:核心对象
B、C:边界点
N:离群点
工作流程:
参数D:输入数据集
参数ε:指定半径
MinPts:密度阈值
1.标记所有对象为unvisited;
2.Do
3.随机选择一个unvisited对象p
4.标记p为visited
5.If p的ε-邻域至少有MinPts个对象
6. 创建一个新簇C,并把p添加到C
7. 令N为p的ε-邻域中的对象集合
8. For N中每个点p'
9. If p是unvisited;
10. 标记p'为visited;
11. If p'的ε-邻域至少有MinPts个对象,把这些对象添加到N;
12. 如果p'还不是任何簇的成员,把p'添加到C;
13. End for;
14. 输出C;
15. Else标记p为噪声;
16.Until没有标记为unvisited的对象;
参数选择:
半径ε,可以根据K距离来设定:找突变点
K距离:给定数据集P={p(i);i=0,1,2,......n},计算点P(i)到集合D的子集S中所有点之间的距离,距离按照从小到大的顺序排序,d(k)就被称为k-距离。
MinPts:k-距离中k的值,一般取得小一些,多次尝试
优势:
(1)不需要指定簇个数
(2)可以发现任意形状的簇
(3)擅长找到离群点(检测任务)
(4)两个参数就够了
劣势:
(1)高维数据有些困难(可以做降维)
(2)参数难以选择(参数对结果的影响非常大)
(3)Sklearn中效率很慢(数据削减策略)
可视化:
Visualizing DBSCAN Clusteringhttps://www.naftaliharris.com/blog/visualizing-dbscan-clustering/