DBSCAN

article/2025/8/24 15:28:40

DBSCAN

算法将具有足够高密度的区域划分为簇,并可 以发现任何形状的聚类

在这里插入图片描述

DBSCAN算法概念
  • 𝛆邻域:给定对象半径𝜀内的区域称为该对象的𝜀邻域。
  • 核心对象:如果给定 𝜀 邻域内的样本点数大于等于Minpoints, 则该对象为核心对象。
  • 直接密度可达:给定一个对象集合D,如果p在q的𝜀邻域内, 且q是一个核心对象,则我们说对象p从q触发是直接密度可达 的(directly density-reachable)。
  • 密度可达:集合D,存在一个对象链 p1,p2…pn,p1=q,pn=p,pi+1是从pi关于𝜀和Minpoints直接 密度可达,则称点p是从q关于𝜀和Minpoints密度可达的。
  • 密度相连:集合D存在点o,使得点p、q是从o关于𝜀和 Minpoints密度可达的,那么点p、q是关于𝜀和Minpoints密 度相连的。

在这里插入图片描述

形象来说,我们可以认为这是系统在众多样本点中随机选中一个,围绕这个被选中的样本点画一个圆,规定这个圆的半径以及圆内最少包含的样本点,如果在指定半径内有足够多的样本点在内,那么这个圆圈的圆心就转移到这个内部样本点,继续去圈附近其它的样本点,类似传销一样,继续去发展下线。等到这个滚来滚去的圈发现所圈住的样本点数量少于预先指定的值,就停止了。那么我们称最开始那个点为核心点,如A,停下来的那个点为边界点,如B、C,没得滚的那个点为离群点,如N


DBSCAN算法可视化

https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/


DBSCAN算法思想
  1. 指定合适的𝜀和Minpoints。
  2. 计算所有的样本点,如果点p的𝜀邻域里有超过Minpoints个 点,则创建一个以p为核心点的新族。
  3. 反复寻找这些核心点直接密度可达(之后可能是密度可达) 的点,将其加入到相应的簇,对于核心点发生“密度相连” 状况的簇,给予合并。
  4. 当没有新的点可以被添加到任何簇时,算法结束。
DBSCAN算法分析

缺点:

  • 当数据量增大时,要求较大的内存支持I/O消耗也很大。
  • 当空间聚类的密度不均匀、聚类间距差相差很大时,聚 类质量较差。

DBSCAN和K-MEANS比较:

  • DBSCAN不需要输入聚类个数。
  • 聚类簇的形状没有要求。
  • 可以在需要时输入过滤噪声的参数。
DBSCAN算法sklearn实现

示例一

from sklearn.cluster import DBSCAN
import numpy as np
import matplotlib.pyplot as plt# 载入数据
data = np.genfromtxt("kmeans.txt", delimiter=" ")# 训练模型
# eps距离阈值,min_samples核心对象在eps领域的样本数阈值
model = DBSCAN(eps=1.5, min_samples=4)
model.fit(data)result = model.fit_predict(data)# 画出各个数据点,用不同颜色表示分类
mark = ['or', 'ob', 'og', 'oy', 'ok', 'om']
for i,d in enumerate(data):plt.plot(d[0], d[1], mark[result[i]])plt.show()

在这里插入图片描述

示例二

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasetsx1, y1 = datasets.make_circles(n_samples=2000, factor=0.5, noise=0.05)
x2, y2 = datasets.make_blobs(n_samples=1000, centers=[[1.2,1.2]], cluster_std=[[.1]])x = np.concatenate((x1, x2))
plt.scatter(x[:, 0], x[:, 1], marker='o')
plt.show()

在这里插入图片描述
使用K-Means算法时不能很好的聚类

from sklearn.cluster import KMeans
y_pred = KMeans(n_clusters=3).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()

在这里插入图片描述

而使用DBSCAN能很好的聚类

from sklearn.cluster import DBSCANy_pred = DBSCAN(eps = 0.2, min_samples=50).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()

在这里插入图片描述


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

相关文章

密度聚类之DBSCAN算法原理

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也…

总结:机器学习之DBSCAN

一、基本思想 DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。 通过将紧密…

聚类算法也可以异常检测?DBSCAN算法详解。

一、算法概述 DBSCAN是一个出现得比较早(1996年),比较有代表性的基于密度的聚类算法,虽然这个算法本身是密度聚类算法,但同样可以用作异常检测,其思想就是找到样本空间中处在低密度的异常样本,本…

DBSCAN详解

一、基本概念 DBSCAN的基本概念可以用1,2,3,4来总结。 1个核心思想:基于密度 直观效果上看,DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇。 2个算法参数:邻…

【机器学习】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…