DBSCAN密度聚类算法原理及Python代码实例

作者: 糖包胖胖 | 来源:发表于2019-03-11 21:14 被阅读6次

    DBSCAN是用来做什么的?

    DBSCAN,全称Density-Based Spatial Clustering of Applications with Noise,中文翻译:针对有噪声数据的基于密度的空间聚类。顾名思义,DBSCAN是一种聚类算法,处理的对象是有噪声的数据,聚类的依据是密度。至此,为了理解DBSCAN算法,我们需要关注如下3个问题:

    (1)什么样的数据是有噪声的数据?

    (2)密度如何定义?

    (3)如何根据密度完成聚类?

    有噪声的数据?

    在采集数据时,噪声通常难以避免。图1展现了三类数据,分别由红绿黄三色圆点表示。黑色圆点表示在数据采集过程中的噪点。K均值聚类算法对噪声十分敏感,因而聚类效果难以令人满意。这正是DBSCAN聚类算法被提出的原因之一。

    图1. 二维空间中有噪声数据。其中黑色圆点表示噪声数据,红绿黄三色圆点分别表示三类数据。


    密度如何定义?

    为了更好地理解密度,首先定义以下概念:

    q\varepsilon -邻域N_{\epsilon }(q)\{p|dist(p,q)<=\varepsilon \}

    q\varepsilon -邻域N_{\varepsilon }(q)的密度:N_{\varepsilon }(q)的点数;

    容易知道,数据集的每一个点的\varepsilon -邻域都有相应密度值。

    如何根据密度进行聚类?

    计算完毕密度后,根据密度可以定义核心点(core point)、边界点(border point)、噪声点(noise point):

    核心点(core point): \varepsilon -邻域密度大于等于MinPts

    边界点(border point): \varepsilon -邻域密度小于MinPts、并且\varepsilon -邻域内存在核心点;

    噪声点(noise point): 既不是核心点也不是边界点;

    图2. 核心点、边界点、噪声点示意图

    直接密度可达(directly density-reachable):如果p是核心点,那么p\varepsilon -邻域内的点与p是直接密度可达的。

    密度可达(density-reachable):如果q是核心点,并且p_{1}q直接密度可达,p_{2}p_{1}直接密度可达,以此类推,p_{n}p_{n-1}直接密度可达,pp_{n}直接密度可达,那么pq是密度可达的。

    图3. 密度可达示意图

    密度相连(density-connected):如果存在点o,点p和点q均分别与点o密度可达,那么点p和点q是密度相连的。

    图4. 密度相连示意图

    聚类:密度可达的点形成一个聚类。

    图5. 原始数据 图6. 根据密度鉴别核心点、边界点与噪声点 图1. DBSCAN聚类结果。不同颜色表示不同聚类,深蓝色表示噪声点。


    进行实验

    观察不同MinPts\varepsilon 参数下的聚类效果:https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

    Python sklearn.cluster.DBSCAN 实例: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

    参考文献

    http://csc.csudh.edu/btang/seminar/slides/DBSCAN.pdf

    联系方式

    邮箱:m18510327489@163.com

    您的支持是我创作的动力~

    谢谢您的支持(* ̄︶ ̄)

    相关文章

      网友评论

        本文标题:DBSCAN密度聚类算法原理及Python代码实例

        本文链接:https://www.haomeiwen.com/subject/kzcbpqtx.html