基本概念

  • 核心点:若某个点的密度达到算法设定的阈值,即ε-邻域内点的数量(包括自己)不小于minPts,则该点为核心点。

  • 边界点:在ε-邻域内点的数量小于minPts,但是落在核心点邻域内的点。

  • 噪声点:不属于任何一个簇的点,从任何一个核心点出发都是密度不可达的。

  • ε-邻域:设定的半径r。

  • 直接密度可达:若某点p在点q的r邻域内,且q是核心点,则称p从q出发是直接密度可达的。

  • 密度可达:若有一个点的序列q0、q1...qk,对任意q0-qi-qk是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的传播。

  • 密度相连:若从某核心点p出发,点q和点k都是密度可达的,则称点q和点k是密度相连的。

如果p是核心点,则它与所有由它可达的点(包括核心点和边界点)形成一个簇,每个簇拥有最少一个核心点,边界点也可以是簇的一部分,但它在簇的边缘位置,因为它不能到达更多的点。在DBSCAN里,簇可以理解为被低密度区域分隔开的稠密对象区域,DBSCAN将具有足够高密度的区域划分为簇,并在具有噪声的空间数据中发现任意形状的簇。

执行过程

DBSCAN通过检查空间数据中每点的邻域来搜索簇。

如果点p的邻域包含的点多于minPts,则创建一个以p为核心点的新簇,然后,DBSCAN迭代地聚集从这些核心点密度可达的对象,这个过程可能涉及一些密度可达簇的合并,当没有新的点可以添加到任何簇时,该过程结束。

具体步骤

  • 根据ϵ寻找每个点的邻域,找出核心点;
  • 对于每一个核心点,如果这个核心点未被分配到某一个簇时,创建一个新的簇;
  • 寻找这个核心点所有邻域点,并循环寻找这些邻域点相应的邻域点,将所有这些点分配到同一个簇;
  • 重复以上三步,直到左右核心点都被分配。对于不属于任何簇的点即为噪声点。

参数选择

半径r:根据k距离来设定。

首先选中一个点,计算它和所有其它点的距离,从小到大排序为d1、d2、d3...,假如d3和d4之间的差异很大,就可以认为d1到d3之间的距离是合适的,将其设为半径。

minPts:一般可通过多次尝试设置。

优缺点

优点

  • 不需要指定簇个数;

  • 可以发现任意形状的簇;

  • 擅长找到离群点(检测任务);

  • 仅需两个参数。

缺点

  • 不适用于高维数据;

  • 参数对结果影响非常大;

  • sklearn中效率很慢(可以应用数据削减策略)。

算法可视化演示

DBSCAN的可视化演示

DBSCAN学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. ios手机键盘拉起之后页面不会回退的问题

    在input输入框输入内容之后,点击完成,键盘下去了,可是页面没有回退回去,也就是页面会空出浏览器高度那一块,这个问题发现于ios手机中的微信浏览器.解决方案如下 <input type=&qu ...

  2. 安装 TypeScript 并编译成JS

    官网: https://github.com/microsoft/TypeScript TypeScript是一种由微软开发的开源.跨平台的编程语言.它是JavaScript的超集,最终会被编译为Ja ...

  3. 2.mysql-库表行管理

    1.数据库管理 1.1 SQL语句 1.1.1 查看当前所有的数据库 show databases; 1.1.2 创建数据库 create database 数据库名; create databse ...

  4. go语言单元测试:go语言用gomonkey为测试函数或方法打桩

    一,安装用到的库1,gomonkey代码的地址: https://github.com/agiledragon/gomonkey 2,从命令行安装gomonkey go get -u github.c ...

  5. Go语言核心36讲09

    从本篇文章开始,我们正式进入了模块2的学习.在这之前,我们已经聊了很多的Go语言和编程方面的基础知识,相信你已经对Go语言的开发环境配置.常用源码文件写法,以及程序实体(尤其是变量)及其相关的各种概念 ...

  6. VS2019 iis无法在Web服务器上启动调试。打开的URL的IIS辅助进程当前没有运行

    可以检查W3SVC服务与WAS这两个服务是否正在运行. 重启这两个服务就可以正常了

  7. layui文件上传

    //前端代码 <div class="layui-form-item"> <label class="layui-form-label"> ...

  8. redux原理分享

    概述 一个状态管理工具 Store:保存数据的地方,你可以把它看成一个容器,整个应用只能有一个 Store. State:包含所有数据,如果想得到某个时点的数据,就要对 Store 生成快照,这种时点 ...

  9. 【Java EE】Day03 DQL、约束、数据库设计、范式、备份和还原

    〇.总结 1.DQL 聚合函数有空值需要使用ifnull函数 where不能使用聚合函数 分页开始索引的计算,及mysql和oracle的方言 2.约束 删除唯一约束DROP INDEX 列名; 3. ...

  10. 【中间件】K8S-kubernetes

    一.概念 1.为什么使用k8s 生产型应用会涉及多个容器.这些容器必须跨多个服务器主机进行部署 可以构建跨多个容器的应用服务.跨集群调度.扩展这些容器,并长期持续管理这些容器的健康状况 在Docker ...