DBSCAN算法的说明文档

DBSCAN算法的描述

  DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。

DBSCAN算法使用场景

  如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多,如果数据集不是稠密的,则不推荐用DBSCAN来聚类。

DBSCAN算法原理

DBSCAN基础知识

E \mathcal{E} E领域: 对象o的 E \mathcal{E} E邻域就是以o为中心,以 E \mathcal{E} E为半径的空间。
核心对象: x j \mathrm{x}_{\mathrm{j}} xj E \mathcal{E} E领域至少包含MinPts个样本,即 ∣ N ε ( x j ) ∣ ≥ M i n P t s \left|N_{\varepsilon}\left(x_{j}\right)\right| \geq M i n P t s Nε(xj)MinPts,那么 x j \mathrm{x}_{\mathrm{j}} xj是一个核心对象。
边界点(edge point): 边界点不是核心点,但落在某个核心点的邻域内。
噪音点(outlier point): 既不是核心点,也不是边界点的任何点。
直接密度可达: 对于样本集合D,如果样本点q在p的 E \mathcal{E} E领域中,并且p是核心对象,那么对象q从对象p直接密度可达(密度直达)。
密度可达: 对于样本集合D,给定一串样本点p1,p2…,pn,p=p1,q=pn,假如对象pi从pi-1直接密度可达,那么对象q从对象p密度可达。
密度相连: 存在样本集合D中的一点o,如果对象o到对象p和对象q都是密度可达的,那么p和q密度相联。
DBSCAN所定义的簇: 由密度可达关系导出的最大的密度相连样本集合。

DBSCAN算法基本原理

  1. DBSCAN通过检查数据集中每点的Eps邻域来搜索簇,如果点p的Eps邻域包含的点多于MinPts个,则创建一个以p为核心对象的簇;
  2. 然后,DBSCAN迭代地聚集从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并;
  3. 当没有新的点添加到任何簇时,该过程结束。

Wiki百科给出的DBSCAN算法的伪代码:

输入:数据集D,给定点在邻域内成为核心对象的最小邻域点数:MinPts,邻域半径:Eps
输出:簇集合

(1) 首先将数据集D中的所有对象标记为未处理状态
(2) for(数据集D中每个对象p) do
(3)    if (p已经归入某个簇或标记为噪声) then
(4)         continue;
(5)    else
(6)         检查对象p的Eps邻域 NEps(p)(7)         if (NEps(p)包含的对象数小于MinPts) then
(8)                  标记对象p为边界点或噪声点;
(9)         else
(10)                 标记对象p为核心点,并建立新簇C, 并将p邻域内所有点加入C
(11)                 for (NEps(p)中所有尚未被处理的对象q)  do
(12)                       检查其Eps邻域NEps(q),若NEps(q)包含至少MinPts个对象,则将NEps(q)中未归入任何一个簇的对象加入C;
(13)                 end for
(14)        end if
(15)    end if
(16) end for

DBSCAN算法的时间复杂度和空间复杂度

时间复杂度

  • DBSCAN的基本时间复杂度是 O(N*找出Eps领域中的点所需要的时间), N是点的个数。最坏情况下时间复杂度是O( N 2 N^{2} N2)
  • 在低维空间数据中,有一些数据结构如KD树,使得可以有效的检索特定点给定距离内的所有点,时间复杂度可以降低到O(NlogN)

空间复杂度: 低维和高维数据中,其空间都是O(N),对于每个点它只需要维持少量数据,即簇标号和每个点的标识(核心点或边界点或噪音点)

DBSCAN算法的调参

  • E \mathcal{E} E的值可以使用绘制k-距离曲线(k-distance graph)方法得到,在k-距离曲线图明显拐点位置为对应较好的参数。若参数设置过小,大部分数据不能聚类;若参数设置过大,多个簇和大部分对象会归并到同一个簇中。

    k-距离定义:

    给定K邻域参数k,对于数据中的每个点,计算对应的第k个最近邻域距离,并将数据集所有点对应的最近邻域距离按照降序方式排序,称这幅图为排序的k距离图,选择该图中第一个谷值点位置对应的k距离值设定为 E \mathcal{E} E

  • MinPts的选取有一个指导性的原则(a rule of thumb),MinPts≥dim+1,其中dim表示待聚类数据的维度。MinPts设置为1是不合理的,因为设置为1,则每个独立点都是一个簇,MinPts≤2时,与层次距离最近邻域结果相同,因此,MinPts必须选择大于等于3的值。若该值选取过小,则稀疏簇中结果由于密度小于MinPts,从而被认为是边界点儿不被用于在类的进一步扩展;若该值过大,则密度较大的两个邻近簇可能被合并为同一簇。因此,该值是否设置适当会对聚类结果造成较大影响。

DBSCAN算法的优缺点

算法优点

  • DBSCAN不需要事先知道要形成的簇类的数量
  • DBSCAN可以发现任意形状的簇类;
  • DBSCAN能够识别出噪声点。对离群点有较好的鲁棒性,甚至可以检测离群点;
  • 可以在需要时输入过滤噪声的参数;

算法缺点

  • 当数据量增大时,要求较大的内存支持I/O消耗也很大;
  • 输入参数敏感,确定参数Eps , MinPts困难 ,若选取不当 ,将造成聚类质量下降;
  • 算法聚类效果依赖于距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。

你可能感兴趣的:(python)