密度聚类之DBSCAN聚类算法
DBSCAN聚类算法
1、算法原理
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一个有代表性的基于密度的空间聚类算法。它将类定义为密度相连的点的最大集合,通过在样本空间中不断寻找最大集合从而完成聚类。该算法在带噪声的样本空间中发现任意形状的聚类并排除噪声。
2、DBSCAN算法涉及的基本定义:
ϵ\epsilonϵ邻域:对于pip_ipi∈\in∈D,其ϵ\epsilonϵ邻域包含对象集合D中与 pip_ipi的距离不大于 ϵ\epsilonϵ的子对象集,即NϵN_ϵNϵ(pip_ipi)={xjx_jxj∈\in∈D|distance(xix_ixi,xjx_jxj)≤\leq≤ϵ\epsilonϵ},这个子对象集的个数记为 |NϵN_ϵNϵ(pip_ipi)|
核心点(Core point):如果给定对象的ϵ\epsilonϵ邻域内的样本点数大于设定的MinPts,则称该对象为核心点(核心对象)。
边界点(Border point):若样本 pip_ipi的邻域内包含的样本数目小于MinPts,但是它在其它核心点的邻域内,则称样本点pip_ipi为边界点。
噪声点(Noise point):既不是核心点也不是噪声点的点
直接密度可达:给定对象集合D,如果对象p在对象q的ϵ\epsilonϵ邻域内,且p是D的一个核心对象,则称为对象p从对象q出发是直接密度可达的。
密度可达:给定对象集合D,如果存在一个对象链p1p_1p1,p2p_2p2,p3p_3p3,···,pnp_npn,p1p_1p1=q,pnp_npn=p,∀\forall∀pip_ipi∈\in∈D(1≤\leq≤i≤\leq≤n-1)都有pi+1p_{i+1}pi+1与pip_ipi是直接密度可达的,则称对象p从对象q出发是密度可达的。
密度相连:如果存在对象o ∈\in∈D使得对象p和对象q都是从o出发密度可达的,则称对象p从对象q出发是密度相连。
3、DBSCAN密度聚类思想
DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。
这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里其他的非核心对象样本都在这个核心对象的ϵ-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的ϵ-邻域中一定有一个其他的核心对象,否则这两个核心对象无法密度可达。这些核心对象的ϵ-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。
那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。
在DBSCAN密度聚类思想中,有一下三点需要注意的地方:
1.样本中的异常样本点。这些点不在任何一个核心对象的周围,在DBSCAN中,我们一般将这些样本点标记为噪声点。
2.距离度量问题。即如何计算某样本和核心对象样本间的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧氏距离,这和KNN分类算法的最近邻思想完全相同。对于少量样本,寻找最近邻可以直接去计算所有样本的距离,如果样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。
3.某些样本可能到两个核心对象的距离都小于ϵ\epsilonϵ,但是这两个核心对象由于不是密度直达,且也不属于同一个聚类簇,则对于这种样本,一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为该类别。也就是说DBSCAN算法不是完全稳定的算法。
4、算法实现
输入:样本集D =(p1p_1p1,p2p_2p2,…,pnp_npn),邻域参数 (ϵ\epsilonϵ,MinPts),样本距离度量方式
输出:簇划分C
步骤:
1.初始化核心对象集合Ω\OmegaΩ=∅\emptyset∅,初始化聚类簇数k=0,初始化未访问样本集合Γ\GammaΓ=D,簇划分C=∅\emptyset∅
2.对于i=1,2,…,n,按下面的步骤找出所有的核心对象:
(a)通过距离度量方式,找到样本xix_ixi的ϵ\epsilonϵ邻域子样本集NϵN_ϵNϵ(pip_ipi)
(b)如果子样本集样本个数满足 |NϵN_ϵNϵ(pip_ipi)|≥\geq≥MinPts,则将样本xix_ixi加入核心对象样本集合:Ω\OmegaΩ=Ω\OmegaΩ⋃\bigcup⋃{xix_ixi}
3.如果核心对象集合Ω\OmegaΩ=∅\emptyset∅,则算法结束,否则转入步骤4.
4.在核心对象集合Ω\OmegaΩ中,随机选择一个核心对象o,初始化当前簇核心对象队列ΩcurΩ_{cur}Ωcur={o},初始化类别序号k=k+1,初始化当前簇样本集合CkC_kCk={o},更新未访问样本集合Γ\GammaΓ=Γ\GammaΓ-{o}
5.如果当前簇核心对象队列ΩcurΩ_{cur}Ωcur=∅\emptyset∅,则当前聚类簇CkC_kCk生成完毕,更新簇划分C={C1C_1C1,C2C_2C2,…,CkC_kCk},更新核心对象集合Ω\OmegaΩ=Ω\OmegaΩ-CkC_kCk,转入步骤3,否则更新核心对象集合Ω\OmegaΩ=Ω\OmegaΩ-CkC_kCk
6.在当前簇核心对象队列ΩcurΩ_{cur}Ωcur中取出一个核心对象 o’ 通过邻域距离阈值ϵ\epsilonϵ找出所有的ϵ\epsilonϵ邻域子样本集NϵN_ϵNϵ(o’),令Δ\DeltaΔ=NϵN_ϵNϵ(o’)⋂\bigcap⋂Ω\OmegaΩ,更新当前簇样本集合CkC_kCk=CkC_kCk⋃\bigcup⋃Δ\DeltaΔ,更新未访问样本集合Ω\OmegaΩ=Ω\OmegaΩ-Δ\DeltaΔ,更新ΩcurΩ_{cur}Ωcur=ΩcurΩ_{cur}Ωcur⋂\bigcap⋂(Δ\DeltaΔ⋃\bigcup⋃Ω\OmegaΩ)-o’,转入步骤5
7.最后输出结果为:簇划分C={C1C_1C1,C2C_2C2,…,CkC_kCk}
5、总结
优点:
1.可以对任意形状的稠密数据进行聚类,而K-Means之类的聚类算法一般只适用于球形簇;
2.可以在聚类的同时发现噪声点,对数据集中的噪声点不敏感;
3.聚类结果没有偏倚,而K-Means之类的聚类算法初始值对聚类结果有很大影响。
缺点:
1.如果样本集的密度不均匀,聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不合适;
2.如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进;
3.调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ\epsilonϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
参考来源
https://www.cnblogs.com/pinard/p/6208966.html
密度聚类之DBSCAN聚类算法相关推荐
- 学习笔记1 三大聚类方法:K-means聚类、层次聚类、DBSCAN聚类
学习笔记1:三大聚类方法:K-means聚类.层次聚类.DBSCAN聚类 文章目录 前言 一.K-means聚类 操作过程 二.层次聚类 操作过程 三.DBSCAN聚类 操作过程 总结 前言 在样本数 ...
- c# c均值聚类及DBSCAN聚类
winform的界面搭建比较简单,首先在界面上的左边产生两堆特征值为 0-100的二维样本.通过 c均值聚类及DBSCAN聚类将聚类结果显示在右边.样本点有x和y值,用List<Point> ...
- Python计算机视觉编程第六章——图像聚类(K-means聚类,DBSCAN聚类,层次聚类,谱聚类,PCA主成分分析)
Python计算机视觉编程 图像聚类 (一)K-means 聚类 1.1 SciPy 聚类包 1.2 图像聚类 1.1 在主成分上可视化图像 1.1 像素聚类 (二)层次聚类 (三)谱聚类 图像聚类 ...
- 机器学习 聚类篇——DBSCAN的参数选择及其应用于离群值检测
机器学习 聚类篇--DBSCAN的算法原理.参数选择及其应用于离群值检测 摘要 1. DBSCAN算法原理 1.1 基本概念定义 1.2 算法流程 2. 参数选择 2.1 领域半径:Eps的选取方法( ...
- 聚类 之 DBSCAN
文章目录 DBSCAN 聚类基本原理 DBSCAN 聚类流程简述 实例演示 DBSCAN 聚类简易应用示例 总结 前面介绍的 KMeans 和 MeanShift 算法对于球状类的数据,聚类效果较好. ...
- 【机器学习】聚类【Ⅴ】密度聚类与层次聚类
主要来自周志华<机器学习>一书,数学推导主要来自简书博主"形式运算"的原创博客,包含自己的理解. 有任何的书写错误.排版错误.概念错误等,希望大家包含指正. 由于字数限 ...
- 了解聚类是什么。聚类方法:k-means、核聚类、层次聚类、谱聚类
聚类 1.什么是聚类 2.聚类方法 2.1 划分式聚类方法 k-means k-means++ bi-kmeans 基于密度的方法 DBSCAN OPTICS算法 层次化聚类算法 核聚类 支持向量聚类 ...
- 【数据挖掘】基于密度的聚类方法 - DBSCAN 方法 ( DBSCAN 原理 | DBSCAN 流程 | 可变密度问题 | 链条现象 | OPTICS 算法引入 | 聚类层次 | 族序概念 )
文章目录 I . DBSCAN 简介 II . DBSCAN 算法流程 III . DBSCAN 算法 优缺点 IV . 可变密度问题 V . 链条现象 VI . OPTICS 算法原理 VII . ...
- dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)
# 密度聚类DBSCAN.HDBSCAN DBSCAN DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声 ...
- 【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法的应用及密度聚类DBSCAN
无监督学习: [机器学习]使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估 [机器学习]使用scikitLearn对数据进行聚类:高斯聚类GaussianMixture [ ...
最新文章
- SpringBoot+MDC实现全链路调用日志跟踪,这才叫优雅!
- Google 在印度建立 AI 实验室,致力于农业、医疗、教育
- Express中间件工作原理介绍
- php 如何实现全选,如何用thinkphp框架实现全选,反选,全不选功能?
- java 注入 循环_spring依赖注入——循环依赖
- 笔记本上的CNN搞定了MNIST
- Java常用接口与类——Date、Calendar、DateFormat、TimeZone(日期相关)
- python中with的用法简单来说_Python中with的用法
- var和function谁先优先执行_浅谈JavaScript 的执行顺序
- 1195.最长最短文本
- 系统如何删除被其它进程占用的文件?
- mysql查询男生基本情况_MySQL(一)基本查询
- 双目视觉摄像机的参数标定参考坐标系介绍
- javascript 纯前端实现汉字转拼音 —— pinyin-pro 库
- 方法调用错误,例如:
- 制作MIcroUSB转TTL下载器CH340
- Java 算法:带权图Weighted Graph
- android 自启动权限,引导用户开启开机自启动权限
- ll -h和du -sh的区别
- 网页屏幕上有只小虫在到处爬(代码)