一、概述

  • 一般基于距离的聚类算法(如K-Means)的聚类结果是球状的簇,当数据集中的聚类结果是非球状结构时,基于距离的聚类算法的聚类效果并不好。
  • 与基于距离的聚类算法不同的是,基于密度的聚类算法可以发现任意形状的聚类。
    【机器学习】聚类算法之密度聚类(DBSCAN)
  • 在基于密度的聚类算法中,通过在数据集中寻找被低密度区域分离的高密度区域,将分离出的高密度区域作为一个独立的类别。
  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有噪声的数据中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。

二、DBSCAN算法原理

  • 在DBSCAN算法中将数据点分为三类:

    • 核心点:若样本xix_iεε邻域内包含的样本数大于等于MinPtsMinPts,即Nε(xi)MinPtsN_ε (x_i )≥MinPts, 则称样本点xix_i为核心点,其中εεMinPtsMinPts是预先设置好的值。
    • 边界点:若样本xix_iεε邻域内包含的样本数目小于MinPtsMinPts,但是它在其他核心点的邻域内,则称样本点xix_i为边界点
    • 噪音点:既不是核心点也不是边界点的点
      【机器学习】聚类算法之密度聚类(DBSCAN)

  • 相关概念:

    • 密度直达:若样本xx核心点并且yyxxεε邻域内,则称样本点yy是由样本点xx密度直达的
    • 密度可达:如果存在一系列的样本点p1,,pnp_1,…,p_n(其中p1=x,p1=yp_1=x,p_1=y),并且样本点 pi+1p_{i+1}可由样本点pip_i密度直可达,我们称样本点yy是样本点xx密度可达的
    • 密度相连:如果存在一个样本点zz,使得xxyy均由样本点zz密度可达。称样本点xxyy是密度相连的。
  • 如下图所示, MinPts=3MinPts=3

    【机器学习】聚类算法之密度聚类(DBSCAN)

    • 由上图可看出$m,p,o.r $都是核心对象,因为他们的内都只是包含3个对象。
    • 样本点q是由样本点m密度直达的
    • 样本点q是由样本点p密度达的

  • 基于密度的聚类算法通过寻找被低密度区域分离的高密度区域,并将高密度区域作为一个聚类的“簇”。

  • 在DBSCAN算法中,聚类“簇”定义为:由密度可达关系导出的最大的密度连接样本的集合

  • 在DBSCAN算法中,由核心对象出发,找到与该核心对象密度可达的所有样本形成“簇”。

  • DBSCAN算法的流程为:

    • 输入:样本集D=(x1,x2,...,xm)D=(x_1,x_2,...,x_m),邻域参数(ϵ,MinPts)(ϵ,MinPts),样本距离度量方式
    • 输出: 簇划分CC.
    • 第一步初始化
      • 初始化核心点集合Ω=Ω=∅,
      • 初始化聚类簇数k=0k=0
      • 初始化未访问样本集合Γ=DΓ = D,
      • 簇划分C=C=∅
    • 第二步: 计算核心点集合Ω=Ω=∅
      • for  j=1,2,...m,dofor\; j=1,2,...m, do
        • 通过距离度量方式,找到样本xix_iϵϵ邻域子样本集Nϵ(xi)N_ϵ (x_i)
        • ifNϵ(xi)MinPtsthenif N_ϵ (x_i )≥MinPts then
          • 将样本xix_i加入核心对象样本集合:Ω=ΩxiΩ=Ω∪{x_i}
        • end  ifend\; if
      • end  forend\; for
    • 第三步:聚类
      • while  Ω!=dowhile\; Ω!=∅ do:
        • 在核心点集合Ω中,随机选择一个核心点oo
        • 初始化当前簇核心对象队列Ωcur=oΩ_{cur}={o},
        • 初始化类别序号k=k+1k=k+1
        • 初始化当前簇样本集合Ck=oC_k={o},
        • 更新未访问样本集合Γ=ΓoΓ=Γ-{o}
        • while  Ωcur!=dowhile\; Ω_{cur} !=∅ do:
          • 取出ΩcurΩ_cur的的首个样本qq
          • 通过邻域距离阈值ϵϵ计算qq的ϵ-邻域Nϵ(q)N_ϵ (q)
          • if  Nϵ(q)MinPtsthenif \;|N_ϵ (q)|≥MinPts then
            • =Nϵ(q)Γ∇=N_ϵ (q)∪Γ
            • 加入队列ΩcurΩ_{cur}
            • Ck=CkC_k=C_k∪∇
              -Γ=ΓΓ=Γ-∇
          • end  ifend \;if
        • end  whileend \;while
    • 第四步:输出C=C1,C2,,CkC={C_1,C_2,…,C_k}
  • DBSCAN算法的一个动态图:

    【机器学习】聚类算法之密度聚类(DBSCAN)

三、总结

  • 和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。

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

  • 主要优点有:

    • 可以对任意形状的稠密数据集进行聚类
    • 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
    • 聚类结果没有偏倚,算法初始值对聚类结果影响不大。

  • 主要缺点有:

    • 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
    • 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
    • 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

参考链接:

相关文章: