DBSCAN详解

article/2025/8/24 17:39:37

一、基本概念

DBSCAN的基本概念可以用1,2,3,4来总结。

1个核心思想:基于密度

直观效果上看,DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇。

在这里插入图片描述

2个算法参数:邻域半径R和最少点数目minpoints

这两个算法参数实际可以刻画什么叫密集——当邻域半径R内的点的个数大于最少点数目minpoints时,就是密集。
在这里插入图片描述

3种点的类别:核心点,边界点和噪声点

邻域半径R内样本点的数量大于等于minpoints的点叫做核心点。不属于核心点但在某个核心点的邻域内的点叫做边界点。既不是核心点也不是边界点的是噪声点。
在这里插入图片描述

4种点的关系:密度直达,密度可达,密度相连,非密度相连

如果P为核心点,Q在P的R邻域内,那么称P到Q密度直达。任何核心点到其自身密度直达,密度直达不具有对称性,如果P到Q密度直达,那么Q到P不一定密度直达。

如果存在核心点P2,P3,……,Pn,且P1到P2密度直达,P2到P3密度直达,……,P(n-1)到Pn密度直达,Pn到Q密度直达,则P1到Q密度可达。密度可达也不具有对称性。

如果存在核心点S,使得S到P和Q都密度可达,则P和Q密度相连。密度相连具有对称性,如果P和Q密度相连,那么Q和P也一定密度相连。密度相连的两个点属于同一个聚类簇。

如果两个点不属于密度相连关系,则两个点非密度相连。非密度相连的两个点属于不同的聚类簇,或者其中存在噪声点。
在这里插入图片描述

二,DBSCAN算法

1.算法描述

DBSCAN 算法对簇的定义很简单,由密度可达关系导出的最大密度相连的样本集合,即为最终聚类的一个簇。

DBSCAN 算法的簇里面可以有一个或者多个核心点。如果只有一个核心点,则簇里其他的非核心点样本都在这个核心点的 Eps 邻域里。如果有多个核心点,则簇里的任意一个核心点的 Eps 邻域中一定有一个其他的核心点,否则这两个核心点无法密度可达。这些核心点的 Eps 邻域里所有的样本的集合组成一个 DBSCAN 聚类簇。

DBSCAN算法的描述如下。

输入:数据集,邻域半径 Eps,邻域中数据对象数目阈值 MinPts;
输出:密度联通簇。
处理流程如下。

1)从数据集中任意选取一个数据对象点 p;

2)如果对于参数 Eps 和 MinPts,所选取的数据对象点 p 为核心点,则找出所有从 p 密度可达的数据对象点,形成一个簇;

3)如果选取的数据对象点 p 是边缘点,选取另一个数据对象点;

4)重复(2)、(3)步,直到所有点被处理。

DBSCAN 算法的计算复杂的度为 O(n²),n 为数据对象的数目。这种算法对于输入参数 Eps 和 MinPts 是敏感的。

2. 算法实例

下面给出一个样本数据集,如表 1 所示,并对其实施 DBSCAN 算法进行聚类,取 Eps=3,MinPts=3。
在这里插入图片描述
数据集中的样本数据在二维空间内的表示如图 3 所示。
在这里插入图片描述
图 3 直接密度可达和密度可达示意

第一步,顺序扫描数据集的样本点,首先取到 p1(1,2)。

1)计算 p1 的邻域,计算出每一点到 p1 的距离,如 d(p1,p2)=sqrt(1+1)=1.414。

2)根据每个样本点到 p1 的距离,计算出 p1 的 Eps 邻域为 {p1,p2,p3,p13}。

3)因为 p1 的 Eps 邻域含有 4 个点,大于 MinPts(3),所以,p1 为核心点。

4)以 p1 为核心点建立簇 C1,即找出所有从 p1 密度可达的点。

5)p1 邻域内的点都是 p1 直接密度可达的点,所以都属于C1。

6)寻找 p1 密度可达的点,p2 的邻域为 {p1,p2,p3,p4,p13},因为 p1 密度可达 p2,p2 密度可达 p4,所以 p1 密度可达 p4,因此 p4 也属于 C1。

7)p3 的邻域为 {p1,p2,p3,p4,p13},p13的邻域为 {p1,p2,p3,p4,p13},p3 和 p13 都是核心点,但是它们邻域的点都已经在 Cl 中。

8)P4 的邻域为 {p3,p4,p13},为核心点,其邻域内的所有点都已经被处理。

9)此时,以 p1 为核心点出发的那些密度可达的对象都全部处理完毕,得到簇C1,包含点 {p1,p2,p3,p13,p4}。

第二步,继续顺序扫描数据集的样本点,取到p5(5,8)。

1)计算 p5 的邻域,计算出每一点到 p5 的距离,如 d(p1,p8)-sqrt(4+1)=2.236。

2)根据每个样本点到 p5 的距离,计算出p5的Eps邻域为{p5,p6,p7,p8}。

3)因为 p5 的 Eps 邻域含有 4 个点,大于 MinPts(3),所以,p5 为核心点。

4)以 p5 为核心点建立簇 C2,即找出所有从 p5 密度可达的点,可以获得簇 C2,包含点 {p5,p6,p7,p8}。

第三步,继续顺序扫描数据集的样本点,取到 p9(9,5)。

1)计算出 p9 的 Eps 邻域为 {p9},个数小于 MinPts(3),所以 p9 不是核心点。

2)对 p9 处理结束。

第四步,继续顺序扫描数据集的样本点,取到 p10(1,12)。

1)计算出 p10 的 Eps 邻域为 {p10,pll},个数小于 MinPts(3),所以 p10 不是核心点。

2)对 p10 处理结束。

第五步,继续顺序扫描数据集的样本点,取到 p11(3,12)。

1)计算出 p11 的 Eps 邻域为 {p11,p10,p12},个数等于 MinPts(3),所以 p11 是核心点。

2)从 p12 的邻域为 {p12,p11},不是核心点。

3)以 p11 为核心点建立簇 C3,包含点 {p11,p10,p12}。

第六步,继续扫描数据的样本点,p12、p13 都已经被处理过,算法结束。

3. 算法优缺点

和传统的 k-means 算法相比,DBSCAN 算法不需要输入簇数 k 而且可以发现任意形状的聚类簇,同时,在聚类时可以找出异常点。

DBSCAN 算法的主要优点如下。

1)可以对任意形状的稠密数据集进行聚类,而 k-means 之类的聚类算法一般只适用于凸数据集。

2)可以在聚类的同时发现异常点,对数据集中的异常点不敏感。

3)聚类结果没有偏倚,而 k-means 之类的聚类算法的初始值对聚类结果有很大影响。

DBSCAN 算法的主要缺点如下。

1)样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用 DBSCAN 算法一般不适合。

2)样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的 KD 树或者球树进行规模限制来进行改进。

3)调试参数比较复杂时,主要需要对距离阈值 Eps,邻域样本数阈值 MinPts 进行联合调参,不同的参数组合对最后的聚类效果有较大影响。

4)对于整个数据集只采用了一组参数。如果数据集中存在不同密度的簇或者嵌套簇,则 DBSCAN 算法不能处理。为了解决这个问题,有人提出了 OPTICS 算法。

5)DBSCAN 算法可过滤噪声点,这同时也是其缺点,这造成了其不适用于某些领域,如对网络安全领域中恶意攻击的判断。

参考和引用

  1. https://blog.csdn.net/dsdaasaaa/article/details/94590159?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159575446519724835834850%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159575446519724835834850&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-5-94590159.pc_ecpm_v3_pc_rank_v3&utm_term=DBSCAN&spm=1018.2118.3001.4187
  2. https://zhuanlan.zhihu.com/p/88747614

http://chatgpt.dhexx.cn/article/Sgv044gv.shtml

相关文章

【机器学习】DBSCAN聚类算法

DBSCAN聚类算法 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。 1.基本概念 核心对象:若某个点的密度达到算法设定的阈值则其为核心点。(即r的 ϵ \e…

30款APP源码打包 Java Android安卓App源码 30款打包下载

[30款APP源码打包 Java Android安卓App源码 30款打包下载](访问密码: 168168)(https://474b.com/file/29013429-461457489)

【Android】Android源码下载

学而不思则罔,思而不学则殆 【Android】Android源码下载 一.环境准备虚拟机Ubuntu系统 二.Android源码下载Ubuntu下载1.repo下载2.修改源代码镜像地址3.初始化仓库4.指定版本5.同步源码树 Windows下载1.repo下载2.修改源代码镜像地址3.初始化仓库4.指定版本5.同步源…

下载Android源码流程(完整版)

要在Linux环境下操作,要在Linux环境下操作,要在Linux环境下操作~~ 不要想在Windows环境下操作,因为会有各种问题。Windows环境的童鞋又不想装双系统的可以跟着下面的操作,Linux的童鞋可以直接跳过看。Mac的童鞋就略过~~~ &#x…

Android系统源码下载

1,ubuntu电脑 2,下载 repo 工具: mkdir ~/bin PATH~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod ax ~/bin/repo3, 建立工作目录: mkdir WORKING_DIRECTORY cd WORKING_DIRECTORY4&am…

Android系统源码_下载编译——从下载系统源码到编译系统镜像

前言 近期因工作原因,需要频繁编译、调试Android源码 ,特别是修改framework层的源码,经过不懈努力,终于可以正常调试了。 这里进行一些总结和分享。 参考文章:清华镜像之Android 镜像使用帮助、Android系统源码编译 …

下载并编译Android源码

下载编译源码 系统架构: Linux:Linux内核和驱动模块(USB Camera 蓝牙等) Libraries:提供动态库,Android运行时库、Dalvik虚拟机等,大部分是C 和C写的,可以看成是native层 Framewo…

一、安卓系统源码下载

前言:为了研究安卓系统,我们需要下载安卓源码,本篇博文参考安卓官网https://source.android.com ,对安卓系统各个版本源码的下载做出了详细解释。 一、环境要求概览 在下载编译安卓系统源码前,我们必须对各个版本安卓…

从github下载最新Android源码

今年5月底开始,谷歌彻底被墙,所有谷歌的网站都不能访问了,这次包括了android.org,googlesource.com,code.google.com。Android官方的资源不能访问,想下载Android代码当然是困难重重了。 本文就为大家解决这…

Android源码下载编译(TI)

0 前言 通过《Android源码下载 & 编译(高通)》的方法下载的源码是包含有kernel目录的(也就是包含Linux内核),然而,通过其它方法下载的源码可能并不包含kernel目录(也就是不包含Linux内核&am…

安卓系统源码、内核下载

一、下载源码 以下载源码2.3.7版本为例 环境ubuntu14.04 1、安装git sudo apt-get install git git --version //查看版本 git config --global user.name "zhangsan" //设置用户名 git config --global user.email "zhangsan163.com" //设置邮箱 git…

AOSP安卓源码下载

Android源码下载 在国内想下载Android要么科学上网,要么使用国内搭建的镜像,有清华镜像,中科大的镜像网站。这里使用清华镜像网站镜像Android源码的下载清华镜像网站地址,为啥我要写这篇笔记嘞,虽然网上有很多这方便的…

安卓系统源码编译系列(一)——下载安卓系统源码教程

最近需要编译安卓系统,咨询了一个编译过安卓系统的朋友,说是下载源码就得下载两天,于是做好了长期抗战的准备,开始了下载安卓源码的旅程。在刚开始下载时,可以参照的内容只有官方教程,于是跟着官方教程一步…

【Android】系统源码下载及编译

源码及编译 步骤 1:创建一个空目录来存放源码: mkdir aosp cd aosp步骤 2:获取最新版本的 repo 并签出 android-8.1.0_r1 分支: repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r1其中&am…

Android源码下载编译(高通)

0 前言 本文介绍如何下载高通平台的Android源码,然后进行编译。 相关:《Android源码下载&编译(TI)》 1 安装工具 下载Android源码需要git,repo等工具,启动repo是Google写的一个专门用于下载Android源码…

Window下载Android源码

Android 10源码下载 想要研究Android 源码的同学可以用此方法进行下载。源码从清华大学开源软件镜像站(https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/)下载。 使用Linux的同学直接参照清华镜像站提供的使用帮助(https://mirrors.tuna.tsinghua.edu…

下载安卓源码

安卓内核源码下载教程 准备环境如何选择你想要下载的版本ubuntu环境配置 准备环境 Ubuntu 18.04 安装 最好是用这个版本或者高于这个版本的,低版本的有一些环境问题可能会让你很难受我使用的是VMware Workstation 16 ProPixel 3 XL、Pixel 3、Pixel 2 XL、Pixel 2、Pixel XL、…

Android13源码下载及全编译流程

一、源码下载 1.1、配置要求 官方推荐配置请参考:https://source.android.google.cn/docs/setup/start/requirements?hlzh-cn,重点有如下几项: 1.1.1、硬件配置要求 1、内存至少 16GB,实测建议至少 32G。 2、磁盘至少 250GB&am…

Java 工厂设计模式

简介 工厂设计模式在java中有大量的应用,如spring框架,这种类型的设计模式属于创建型模式。在工厂设计模式中,创建逻辑不会对客户端暴露,可以通过一个对外接口创建所需对象。 工厂模式使用场景 需要频繁创建对象且这些对象多处…

简单工厂设计模式

简单工厂设计模式 刚开始学设计模式,犹如刚睁开眼看世界的孩子,满眼都是惊奇,原来代码的世界可以如此的精彩纷呈.当然这些都是前辈智慧的结晶.简单工厂设计模式是接触的第一个设计模式,看完后更多的是不懂和迷糊.不过相信慢慢会懂得其精髓的. 简单工厂设计模式是创建型(就是把对…