基本概念
-
核心点:若某个点的密度达到算法设定的阈值,即ε-邻域内点的数量(包括自己)不小于minPts,则该点为核心点。
-
边界点:在ε-邻域内点的数量小于minPts,但是落在核心点邻域内的点。
-
噪声点:不属于任何一个簇的点,从任何一个核心点出发都是密度不可达的。
-
ε-邻域:设定的半径r。
-
直接密度可达:若某点p在点q的r邻域内,且q是核心点,则称p从q出发是直接密度可达的。
-
密度可达:若有一个点的序列q0、q1...qk,对任意q0-qi-qk是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的传播。
-
密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连的。
如果p是核心点,则它与所有由它可达的点(包括核心点和边界点)形成一个簇,每个簇拥有最少一个核心点,边界点也可以是簇的一部分,但它在簇的边缘位置,因为它不能到达更多的点。在DBSCAN里,簇可以理解为被低密度区域分隔开的稠密对象区域,DBSCAN将具有足够高密度的区域划分为簇,并在具有噪声的空间数据中发现任意形状的簇。
执行过程
DBSCAN通过检查空间数据中每点的邻域来搜索簇。
如果点p的邻域包含的点多于minPts,则创建一个以p为核心点的新簇,然后,DBSCAN迭代地聚集从这些核心点密度可达的对象,这个过程可能涉及一些密度可达簇的合并,当没有新的点可以添加到任何簇时,该过程结束。
具体步骤
- 根据ϵ寻找每个点的邻域,找出核心点;
- 对于每一个核心点,如果这个核心点未被分配到某一个簇时,创建一个新的簇;
- 寻找这个核心点所有邻域点,并循环寻找这些邻域点相应的邻域点,将所有这些点分配到同一个簇;
- 重复以上三步,直到左右核心点都被分配。对于不属于任何簇的点即为噪声点。
参数选择
半径r:根据k距离来设定。
首先选中一个点,计算它和所有其它点的距离,从小到大排序为d1、d2、d3...,假如d3和d4之间的差异很大,就可以认为d1到d3之间的距离是合适的,将其设为半径。
minPts:一般可通过多次尝试设置。
优缺点
优点
-
不需要指定簇个数;
-
可以发现任意形状的簇;
-
擅长找到离群点(检测任务);
-
仅需两个参数。
缺点
-
不适用于高维数据;
-
参数对结果影响非常大;
-
sklearn中效率很慢(可以应用数据削减策略)。