当前位置: 首页 > news >正文

【机器学习基础】DBSCAN

🚀个人主页:为梦而生~ 关注我一起学习吧!
💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学!
特别提醒:针对机器学习,特别开始专栏:机器学习python实战 欢迎订阅!本专栏针对机器学习基础专栏的理论知识,利用python代码进行实际展示,真正做到从基础到实战!
💡往期推荐
【机器学习基础】机器学习入门(1)
【机器学习基础】机器学习入门(2)
【机器学习基础】机器学习的基本术语
【机器学习基础】机器学习的模型评估(评估方法及性能度量原理及主要公式)
【机器学习基础】一元线性回归(适合初学者的保姆级文章)
【机器学习基础】多元线性回归(适合初学者的保姆级文章)
【机器学习基础】对数几率回归(logistic回归)
【机器学习基础】正则化
【机器学习基础】决策树(Decision Tree)
【机器学习基础】K-Means聚类算法
💡本期内容:紧接着上一篇介绍的K-Means聚类,本篇文章针对原型聚类的缺点,介绍了密度聚类DBSCAN,丰富了无监督学习的内容介绍。


文章目录

  • 1 DBSCAN发展状况
  • 2 DBSCAN算法的基本概念
  • 3 DBSCAN参数设置
  • 4 DBSCAN算法的核心思想
  • 5 DBSCAN伪代码描述
  • 6 DBSCAN的优缺点


1 DBSCAN发展状况

目前,人们提出的聚类算法主要分为五种类型:划分法、层次法、基于模型的算法、基于密度的算法和基于网格的算法。基于密度的聚类算法是以出格合适对不确定命据集举行聚类,不用计较各种各样的距离,而是基于密度,就可以迅速的完成样本集的聚类。基于密度的聚类方式在数据识别、数据分析、图象处置、网络安全等范畴有着普遍的利用,是以,关于基于密度聚类算法的钻研有着普遍的现实和现实意义。

基于密度的经典代表算法主要有两种:DBSCAN和OPTIC。针对这两种经典的算法,学术界展开了大量的讨论。DBSCAN于1996年由Ester等提出,DBSCAN算法它不仅可以对高密度区域进行聚类划分,还可以对低密度区域进行过滤,最终在噪声数据集中得到任意形状的簇。同时,DBSCAN也存在一些很明显的缺点,使用DBSCAN必须先确定Eps和MinPts这两种参数。因为DBSCAN算法对这两种参数感应较高,一旦取值不当就会影响聚集效果。OPTIC是1996年Ankerst等提出来的,是对DBSCAN算法的一大改进。


2 DBSCAN算法的基本概念

在这里插入图片描述

DBCSAN是密度聚类中最为经典的一种算法,这种算法不需要提前设置制定聚类数量,但是对于用户设置的eps和minpts参数的数值波动较大。能够有效地识别噪声点。对于样本集,它既可以应用于凸样本集,同样也可以被非凸样本集所利用。这类聚类算法是通过数据集密度的紧密程度来进行划分的,但当采样区域密度不均匀,组间距离相差很大时,算法组的效果会很差。同一类型的图案是紧密相连的,应在离类型外围不远的地方提供相同类型的样品。最后,将每一组紧密相连的样本分为不同的类别,产生聚类效应。


3 DBSCAN参数设置

DBSCAN涉及的参数和关系较多并且受参数设置的影响较大,有两个算法参数:邻域半径eps和最少点数目minpts,3种点的类别:核心点,边界点和噪声点,4种点的关系:密度直达,密度可达,密度相连,非密度相连。

  1. E邻域:对于给定一个对象,如果它与点的距离小于等于eps则称该邻域是是该对象的E邻域。E邻域是用户主观选择的,eps的值限制着核心点的搜索范围。
  2. 核心对象:对于给定的对象时,如果样品中的对象E邻域的附近的数目是大于或等于minpts值,称为核心目的是给定对象。
  3. 直接密度可达:在一个样本集里,如果一个对象点m是核心对象,另一个对象n点在该对象m的邻域半径里,那么则称样本点n从样本点m直接密度可达。
  4. 密度相连:对于对象m和对象n,如果有核心对象o,使得数据对象m和对象n均从o密度可达,那么则称对象m和对象n密度相连。
  5. 密度聚类簇:在一个给定数据集中,对于一个核心点与他密度可达的所有点组成一个密度聚类簇。
  6. 噪声:在一个数据集中,如果一个点在聚类结果上不属于任何一个聚类簇,那么则称该点为噪声。
  7. 核心点:如果一个边界点在某个核心对象的邻域内,并且该点不是核心对象那么该点是核心点。
    在实验实际操作中, DBSCAN有三个输入数据:数据集、邻域半径eps、最少点数值minpts,DBSCAN受半径eps和最少点数值minpts数值波动较大,并且是用户根据实际操作情况认为设置的。

在这里插入图片描述


4 DBSCAN算法的核心思想

从以上的叙述中我们可以看出,其基本思想与广度优先搜索思想类似,主要受eps和minpts数值的影响。

  • 它从一个随机的没有经过访问的一个对象点开始进行搜索,并检查对象点的E邻域是否含有至少minpts个对象,如果它附近点的数量少于minpts,那么该点将会暂时标记为噪声点,如果附近点的数目大于等于minpts,那么该对象点会创建一个新的簇,并将把该点和它的E邻域内的所有对象全部放入列为候选集合。

  • 而后,这些核心对像会被该算法迭代的聚集,并把这些核心对想中直接必读可达的对象添加到新的簇中,随后检索被添加对象的e邻域是否包含minpts个对象,并重复上述操作,直到簇不能再扩展或者候选集合为空,输出,在这个过程中会牵扯密度可达簇的聚集。

  • 在完成收集集群后,将DBSCAN然后从对象的其余部分选择随机对象尚未访问和聚类过程。直到所有的对象都已经分配。

在这里插入图片描述

DBSCAN还有一个特点如果一个点不是一个簇的噪声并且该点的附近点少于minpts数值,那么该点被标记为不属于任何簇的噪声点。噪声点被识别为选择对象过程的一部分,如果特定的对象点没有足够的附近点,则将其标记为噪声点。


5 DBSCAN伪代码描述

在这里插入图片描述


6 DBSCAN的优缺点

  • 优点:
  1. DBSCAN与k-means划分聚类算法相比,DBSCAN能够处理任何形态的类,而k-means只能处理凸型的类;DBSCAN不需要自己划分聚类簇的情况,k-means需要在算法执行前进行各种参数的设置。
  2. DBSCAN可以有效地识别和剔除噪声,并且可以在根据实验需要输入过滤噪声的参数。
  3. 对于样本集中的异常点不敏感
  • 缺点:
  1. 从DBSCAN运行的情况来看,主要确定邻域半径eps和邻域样本数阈值minpts,可以看出算法对eps和minpts这两个由用户确定的参数非常敏感,主要是由于带有很大的主观性。确定eps和minpts非常复杂,一旦取值不好,就会对聚类效果产生不好的影响,造成聚类质量下降甚至无法进行工作
    当minpts取值一定时,如果eps数值设置的较小,会产生大量的离群点,大部分数据都不能进行聚类,如果设置的数值较大,大部分数值和类都会聚类到同一个簇,在簇得中心会出现一个空洞;
    当eps取值一定时,如果minpts的值太大,集群中的点会被标记为离群点,如果值太小,会导致产生大量的核心点。所以eps和minpts的取值搭配不同,就会产生不同的聚类效果。
  2. DBSCAN是基于密度聚类算法,从实验结果来看,当空间聚类的密度不均匀、聚类间隔差别很大时,数据集不能很好地产生簇,就会造成聚类效果质量下降
  3. 当DBSCAN处理较大的数据库的时候,核心对象不断地添加同时没有被访问的对象就会停留在内存中,如果内存过小,就会造成内存的拥堵,这就需要大量的内存来支持程序的执行,来储存核心对象的信息,并且i/o消耗也很大;对于DBSCAN和整个样本集只采用了邻域半径eps和邻域样本数阈值minpts一组参数。如果样本集中存在不同密度的簇或者嵌套簇,那么DBSCAN 算法不能很好地处理这种情况
  4. DBSCAN算法可以有效地识别和剔除噪声,这既是它的一大优点,同时也是它的一大缺点,这就造成了DBSCAN不适用于网络安全等领域的问题
  5. 由于算法邻域半径eps的选取需要用到距离公式的选取,在实际操作中经常用到k-距离曲线方法,对于DBSCAN处理高维度的数据,就会造成运算困难,存在“维度灾难”

相关文章:

【机器学习基础】DBSCAN

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…...

计算机硬件 4.4键盘与鼠标

第四节 键盘与鼠标 一、认识键盘 1.地位:计算机系统最基本的输入设备。 2.外观结构:面板、键帽、底盘、数据线。 3.组成键区:主键区、功能键区、辅助键区和编辑(控制)键区。 二、键盘分类 1.按接口分 ①AT口&…...

Flappy Bird QDN PyTorch博客 - 代码解读

Flappy Bird QDN PyTorch博客 - 代码解读 介绍环境配置项目目录结构QDN算法重要函数解读preprocess(observation)DeepNetWork(nn.Module)BirdDQN类主程序部分 介绍 在本博客中,我们将介绍如何使用QDN(Quantile Dueling Network)算法&#xf…...

听GPT 讲Rust源代码--compiler(9)

File: rust/compiler/rustc_trait_selection/src/traits/select/mod.rs 在Rust源代码中,rust/compiler/rustc_trait_selection/src/traits/select/mod.rs文件的作用是实现Rust编译器的trait选择器。 首先,让我们逐个介绍这些struct的作用: Se…...

Go语言中关于go get, go install, go build, go run指令

go get go get 它会执行两个操作 第一个, 是先将远程的代码克隆到Go Path的 src 目录那二个, 是执行go install命令 那如果指定的包可以生成二进制文件那它就会把这个二进制文件保存到这个 Go Path 的bin目录下面这是 go install 命令执行的操作 如果只需要下载包&#xff0c…...

石头剪刀布游戏 - 华为OD统一考试

OD统一考试 分值: 100分 题解: Java / Python / C++ 题目描述 石头剪刀布游戏有 3 种出拳形状: 石头、剪刀、布。分别用字母 A,B,C 表示游戏规则: 出拳形状之间的胜负规则如下: A>B; B>C; C>A; 左边一个字母,表示相对优势形状。右边一个字母,表示相对劣势形状。…...

【北亚服务器数据恢复】ZFS文件系统服务器ZPOOL下线的数据恢复案例

服务器数据恢复环境: 服务器中有32块硬盘,组建了3组RAIDZ,部分磁盘作为热备盘。zfs文件系统。 服务器故障: 服务器运行中突然崩溃,排除断电、进水、异常操作等外部因素。工作人员将服务器重启后发现无法进入操作系统。…...

C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry

文章目录 前言反射是什么?常用类型操作SummryPropertyInfoMethodInfo无参函数运行 有参函数运行,获取paramterInfo 总结 前言 我之前写了一篇Attribute特性的介绍,成功拿到了Attribute的属性,但是如果把Attribute玩的溜,那就要彻…...

2020年认证杯SPSSPRO杯数学建模D题(第一阶段)让电脑桌面飞起来全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现: 对于一些必须每天使用电脑工作的白领来说,电脑桌面有着非常特殊的意义,通常一些频繁使用或者比较重要的图标会一直保留在桌面上,但是随着时间的推移,…...

谷歌推出创新SynCLR技术:借助AI生成的数据实现高效图像建模,开启自我训练新纪元!

谷歌推出了一种创新性的合成图像框架,这一框架独特之处在于它完全不依赖真实数据。这个框架首先从合成的图像标题开始,然后基于这些标题生成相应的图像。接下来,通过对比学习的技术进行深度学习,从而训练出能够精准识别和理解这些…...

Vue2中使用echarts,并从后端获取数据同步

一、安装echarts npm install echarts -S 二、导入echarts 在script中导入&#xff0c;比如&#xff1a; import * as echarts from "echarts"; 三、查找要用的示例 比如柱状图 四、初始化并挂载 <template><div id"total-orders-chart" s…...

【Redux】自己动手实现redux-thunk

1. 前言 在原始的redux里面&#xff0c;action必须是plain object&#xff0c;且必须是同步。而我们经常使用到定时器&#xff0c;网络请求等异步操作&#xff0c;而redux-thunk就是为了解决异步动作的问题而出现的。 2. redux-thunk中间件实现源码 function createThunkMidd…...

ElasticSearch使用Grafana监控服务状态-Docker版

文章目录 版本信息构建docker-compose.yml参数说明 创建Prometheus配置文件启动验证配置Grafana导入监控模板模板说明 参考资料 版本信息 ElasticSearch&#xff1a;7.14.2 elasticsearch_exporter&#xff1a;1.7.0&#xff08;latest&#xff09; 下载地址&#xff1a;http…...

VS Code 如何调试Python文件

VS Code中有1,2,3处跟Run and Debug相关的按钮&#xff0c; 1 处&#xff1a;调试和运行就不多说了&#xff0c;Open Configurations就是打开workspace/.vscode下的lauch.json文件&#xff0c;而Add Configuration就是在lauch.json文件中添加当前运行Python文件的Configuratio…...

day06、SQL语言之概述

SQl 语言之概述 6.1 SQL语言概述6.2 SQL语言之DDL定义数据库6.3 SQL语言之DML操纵数据库 6.1 SQL语言概述 6.2 SQL语言之DDL定义数据库 6.3 SQL语言之DML操纵数据库...

3D目标检测(教程+代码)

随着计算机视觉技术的不断发展&#xff0c;3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比&#xff0c;3D目标检测可以在三维空间中对物体进行定位和识别&#xff0c;具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…...

让设备更聪明 |启英泰伦离线自然说,开启智能语音交互新体验!

语音交互按部署方式可以分为两种&#xff1a;离线语音交互和在线语音交互。 在线语音交互是将数据储存在云端&#xff0c;其具备足够大的存储空间和算力&#xff0c;可以实现海量的语音数据处理。 离线语音交互是以语音芯片为载体&#xff0c;语音数据的采集、计算、决策均在…...

React Hooks之useState、useRef

文章目录 React Hooks之useStateReact HooksuseStatedemo&#xff1a;在函数式组件中使用 useState Hook 管理计数器demo&#xff1a;ant-design-pro 中EditableProTable组件使用 useRef React Hooks之useState React Hooks 在 React 16.8 版本中引入了 Hooks&#xff0c;它是…...

提供电商Api接口-100种接口,淘宝,1688,抖音商品详情数据安全,稳定,支持高并发

Java是一种高级编程语言&#xff0c;由Sun Microsystems公司于1995年推出&#xff0c;现在属于Oracle公司开发和维护。Java以平台无关性、面向对象、安全性、可移植性和高性能著称&#xff0c;广泛用于桌面应用程序、嵌入式系统、企业级服务、Android移动应用程序等。 接口是Ja…...

git的使用 笔记1

GIT git的使用 使用git提交的两步 第一步&#xff1a;是使用 git add 把文件添加进去&#xff0c;实际上就是把文件添加到暂存区。第二步&#xff1a;使用git commit提交更改&#xff0c;实际上就是把暂存区的所有内容提交到当前分支上。 .git 跟踪管理版本的目录 创建版本库…...

基于SpringBoot的医疗挂号管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的医疗挂号管理系统,java…...

prometheus与zabbix监控的对比介绍

一、普米与zabbix基本介绍 1、prometheus介绍 Prometheus的基本原理是Prometheus Server通过HTTP周期性抓取被监控组件的监控数据&#xff0c;任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式&#xff0c;就可以接入Prometheus监控。 工作流程大致分为收集数…...

详解全志R128 RTOS安全方案功能

介绍 R128 下安全方案的功能。安全完整的方案基于标准方案扩展&#xff0c;覆盖硬件安全、硬件加解密引擎、安全启动、安全系统、安全存储等方面。 配置文件相关 本文涉及到一些配置文件&#xff0c;在此进行说明。 env*.cfg配置文件路径&#xff1a; board/<chip>/&…...

【MySQL】WITH AS 用法以及 ROW_NUMBER 函数 和 自增ID 的巧用

力扣题 1、题目地址 601. 体育馆的人流量 2、模拟表 表&#xff1a;Stadium Column NameTypeidintvisit_datedatepeopleint visit_date 是该表中具有唯一值的列。每日人流量信息被记录在这三列信息中&#xff1a;序号 (id)、日期 (visit_date)、 人流量 (people)每天只有…...

基于SpringBoot的在线考试系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把在线考试管理与现在网络相结合&#xff0c;利用java技术建设在线考试系统&#xff0c;实现在线考试的信息化管理。则对于进一步提高在线考试管理发展&#xff0c;丰富在线考试管理经验能起到不少的促进作用。 在线考试系统能够通…...

基于Spring Boot的美妆分享系统:打造个性化推荐、互动社区与智能决策

基于Spring Boot的美妆分享系统&#xff1a;打造个性化推荐、互动社区与智能决策 1. 项目介绍2. 管理员功能2.1 美妆管理2.2 页面管理2.3 链接管理2.4 评论管理2.5 用户管理2.6 公告管理 3. 用户功能3.1 登录注册3.2 分享商品3.3 问答3.4 我的分享3.5 我的收藏夹 4. 创新点4.1 …...

Axure医疗-住院板块,住院患者原型预览,新增医护人员原型预览,新增病房原型预览,选择床位原型预览,主治医生原型预览,主治医生医嘱原型预览

目录 一.医疗项目原型图-----住院板块 1.1 住院板块原型预览 1.2 新增住院患者原型预览 1.3 新增医护人员原型预览 1.4 新增病房原型预览 1.5 选择床位原型预览 1.6 主治医生原型预览 1.7 主治医生医嘱原型预览 1.8 主治医生查看患者报告原型预览 1.9 护士原型预…...

前端实战第一期:悬浮动画

悬浮动画 像这样的悬浮动画该怎么做&#xff0c;让我们按照以下步骤完成 步骤&#xff1a; 先把HTML内容做起来&#xff0c;用button属性创建一个按钮&#xff0c;按钮内写上悬浮效果 <button classbtn>悬浮动画</button>在style标签内设置样式,先设置盒子大小&…...

Python学习笔记(五)函数、异常处理

目录 函数 函数的参数与传递方式 异常处理 函数 函数是将代码封装起来&#xff0c;实现代码复用的目的 函数的命名规则——同变量命名规则&#xff1a; 不能中文、数字不能开头、不能使用空格、不能使用关键字 #最简单的定义函数 user_list[] def fun(): #定义一个函数&…...

Vue实现模糊查询

在Vue中实现模糊查询&#xff0c;你可以使用JavaScript的filter和includes方法&#xff0c;结合Vue的v-for指令。下面是一个简单的例子&#xff1a; 首先&#xff0c;你需要在你的Vue实例中定义一个数据数组和一个查询字符串。 data() { return { items: [Apple, Banana, Che…...

网站建设的一般过程包括哪些方面/自媒体账号申请

88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 就是归并排序的merge嘛&#xff0c;借助一个辅助数组就可以了。 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {if(n 0) return;vector&l…...

哪些网站用黑体做的/云搜索app下载

&#x1f320; 『精品学习专栏导航帖』 &#x1f433;最适合入门的100个深度学习实战项目&#x1f433;&#x1f419;【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码&#x1f419;&#x1f436;【机器学习入门项目10例目录】项目详解 数据集 完整源码&…...

安徽省政府网站建设/百度网盘首页

cocos2d-x最新支持了webp图片格式&#xff0c;google在2010年发布的这个图片格式具备比jpg和png更高的压缩比&#xff0c;并且支持alpha通道。 图片体积对比&#xff1a; 原始图片&#xff08;map_008_BG_2.png 1024*1024的一张背景图&#xff09; 大小910k 压缩为png8 369k …...

东营网站建设报价/百度网址大全 官网

本文翻译整理自youtube 7 Amazing Developer Tools that youre not using yet 1. BundlePhobia BundlePhobia用于分析npm package的依赖、bundle后的大小、下载速度预估等等&#xff0c;帮助你在引用一个package之前了解引入该package的代价&#xff1a; 你也可以将项目的pac…...

手机网站设计公司只选亿企邦/网络销售工作靠谱吗

首先说明&#xff0c;这不是一个bug。应该说是一个比较容易中招的陷阱。 今天使用switch遇到一个问题&#xff0c;代码如下&#xff1a; 1 <?php2 3 4 $num 0;5 switch ($price) {6 case $price < 100:7 $price_between "100以下";8 br…...

深圳推广公司推荐/seo高级

这题居然不用高精度就能过……测试数据好弱 Program P1837; varc,g,i,j,k,p:longint;li,w:array[1..20] of longint;f:array[1..20,-7500..7500] of longint; beginfillchar(f,sizeof(f),0);read(c,g);for i:1 to c do read(li[i]);for i:1 to g do read(w[i]);for i:1 to c do…...