【机器学习】DBSCAN聚类算法的理论/实现与调参

本文详细介绍了DBSCAN(Density-Based Spatial Clustering of Applications with Noise)聚类算法,包括其基本概念、核心点、边界点和噪声点的定义,以及密度直达、密度可达和密度相连的关系。DBSCAN通过寻找高密度区域来划分簇,对异常值有良好的鲁棒性,且无需预设簇的数量。文中还阐述了算法流程,参数选择与调参过程,以及如何在Python和C++中实现DBSCAN。此外,讨论了算法的优缺点,并提供了性能优化的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 初识DBSCAN
  • DBSCAN: Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法,是一种基于密度的空间聚类算法

  • DBSCAN将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类

  • DBSCAN是一种著名的密度聚类算法,它基于一组"邻域"参数来刻画样本分布的紧密程度。DBSCAN先发现密度较高的点,然后把相近的高密度点逐步连成一片,进而生成各种簇

  • DBSCAN算法的可视化演示:DBSCAN聚类可视化

2. 基本概念解释
  • 核心对象

    • 邻域内至少包含MinPts个最少样本/最少点的对象
    • 邻域和MinPts个数均可指定
    • MinPts个最少样本包含核心对象本身
  • 邻域

    • 邻域是一个空间,点的邻域是与点距离小于 ε ε ε的集合
  • 核心点/边界点/噪声点

    • 核心点,Core Point. 若样本 x x x ε ε ε邻域内至少包含MinPts个样本,则称样本 x x x为核心点
    • 边界点,Border Point. 若样本 x x x ε ε ε邻域内包含的样本数量小于MinPts,但是它在其他核心点的邻域内,则称样本点 x x x为边界点
    • 噪声点,或离群点/异常样本,Noise Point. 既不是核心点也不是边界点的点
  • 密度直达/密度可达/密度相连

    • 密度直达:两个样本位于统一邻域内,且其中一个样本是核心对象,称样本由核心对象密度直达。密度直达不满足对称性
    • 密度可达:一个样本能由另一个核心对象通过密度直达串起来,称样本由核心对象密度可达。密度可达不满足对称性
    • 密度相连:若两个样本均由另一个样本密度可达,称这两个样本密度相连。密度相连满足对称性
    • 由密度可达关系导出的最大的密度相连的样本集合。
    • 在基于密度的聚类算法中,通过在数据集中寻找被低密度区域分离的高密度区域,将分离出的高密度区域作为一个独立的类别
3. DBSCAN算法流程
  • 算法描述:以每个数据点为圆心,以邻域为半径画圈,然后数有多少个点,在这个圈内,这个数就是点密度值,然后选取一个点密度阈值MinPts,圈内点数小于MinPts为低密度点,大于或等于MinPoints的为高密度点,称之为核心点或核心对象;如果有一个高密度的点在另一个高密度点的圈内,我们就把这两个点连接起来,这样就可以把好多点不断串联起来;如果有低密度的点也在高密度点的圈内,把它也连到最近的高密度点上,称之为边界点

  • 簇的形成:DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止

  • 簇的形成图示:

  • 对算法步骤的理解:

    • MinPts最少点包含核心对象本身
    • 离群点/边界点的区别:边界点属于某个簇,离群点不属于任何簇
    • DBSCAN不是完全稳定的算法,某些样本可能到两个核心对象的距离都小于 ϵ ϵ ϵ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如果界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别
    • 整个搜索过程类似广度优先搜索与深度优先搜索的结合。每一个核心对象邻域内的点加入队列,然后FIFO访问同时将新的核心对象的邻域内点继续加入队列访问,这样一级一级一圈一圈往外访问最后形成簇
    • 算法会重新访问数据点
  • 算法的时间和空间复杂度

    • 时间复杂度:DBSCAN的基本时间复杂度是 O(N * 找出Eps领域中的点所需要的时间),N是点的个数。最坏情况下时间复杂度是O(N^2)
    • 时间复杂度:在低维空间数据中,有一些数据结构如KD树,使得可以有效的检索特定点给定距离内的所有点,时间复杂度可以降低到O(NlogN)
    • 空间复杂度:低维和高维数据中,其空间都是O(N),对于每个点它只需要维持少量数据,即簇标号和每个点的标识(核心点或边界点或噪音点)
4. 算法参数选择与调参过程
  • 参数选择

    • 两个必须参数:邻域半径 ε ε ε + 最少点 M i n P t s MinPts MinPts
    • ε ε ε设置的非常小,则意味着没有点是核心对象,所有点都被标记为噪声
    • ε ε ε设置的非常大,可能会导致所有点形成单个簇
    • DBSCAN虽然不显示设置簇的个数,但设置邻域半径可以隐式地控制找到的簇的个数
    • 以下为不同邻域半径和不同最少点参数下的聚类结果对比说明
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值