【机器学习基础】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处理高维度的数据,就会造成运算困难,存在“维度灾难”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++_string类

目录 一、string的模拟实现 1、初始化字符串 2、拷贝构造 3、赋值重载 4、迭代器 5、比较字符串 6、尾插字符、字符串 7、resize 8、中间插入数据、删除数据 8.1 插入数据 8.2 删除数据 9、查找数据 10、打印对象(流插入、流提取) 结语&a…

centos7部署minio单机版

一、目标 在centos7上部署minio单机版 二、centos7部署minio 1、下载minio mkdir /usr/local/minio cd /usr/local/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod x minio 2、新建minio存储数据的目录 mkdir -p /data/minio/data3、新建…

sql语句条件查询,模糊查询

一.按条件表达式筛选 #案例1&#xff0c;查询工资>12000的员工信息 SELECT * FROM employees WHERE salary>12000; #案例2&#xff0c;查询部门编号不等于90号的员工名和部门编号SELECT last_name,department_idFROM employeesWHEREdepartment_id<>90;二 按逻辑表…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目&#xff0c;解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

Spring的IOC解决程序耦合

目录 1.配置项目 1.1配置pom.xml 1.2Spring常用功能的Jar包依赖关系 1.3简单代码 2.IOC 2.1.applicationContext.xml 2.2.测试 3.DI 3.1概述 3.2.构造函数注入 3.3set方法注入 3.4自动注入 3.5注入集合类型的属性 1.配置项目 1.1配置pom.xml <?xml version&…

【算法每日一练]-动态规划(保姆级教程 篇14) #三倍经验 #散步 #异或和 #抽奖概率

目录 今日知识点&#xff1a; 金字塔的正反dp两种方案&#xff0c;转移方程取决于dp的具体含义 取模实现循环走m步回到原点的方案 在统计上升子序列的时候使用最小结尾元素进行标记&#xff0c;一举两得 将亏本的概率转换各种情况的方案&#xff0c;然后统计亏本的情况的方…

LeetCode——2487. 从链表中移除节点

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你一个链表&#xff0c;然后让你从链表中移除一些节点&#xff0c;移除的规则就是我们选择的这个节点在原链表中往右不能有比这个节点大的值。思路&#xff1a;这个题我最开始以为是双指针&#xff0c;然后找…

数字孪生技术详解

在线工具推荐&#xff1a;3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 数字孪生技术正在迅速彻底改变企业的运营方式。借助数字孪生技术&#xff0c…

Lazada商品详情API(lazada.item_get)获取商品的图片信息

使用Lazada商品详情API&#xff08;lazada.item_get&#xff09;获取商品的图片信息&#xff0c;首先确保你已经注册了Lazada开发者账号并获取到了API密钥。下面是一个示例代码&#xff0c;展示如何使用Python调用该API并获取商品的图片信息&#xff1a; import requests im…

opengl和directx中,渲染管线是什么?

在opengl 3D画图&#xff08;渲染或图像处理&#xff09;中&#xff0c;很多人都围绕着一个pipeline的词做很多解释&#xff0c;似乎明白这个词的含义成了入门必须要领悟的一道门槛。但实际上呢&#xff1f; 这都是因为翻译错误搞得大家非要解释一番的。好好的翻译工具不用&am…

【Nginx】在线安装与离线安装

目录 1、下载nginx news 1.2、 安装包 2、 在线安装 第一步&#xff0c;安装pcre 第二步&#xff0c;安装openssl 、zlib 、 gcc 依赖 第三步&#xff0c;安装nginx 第四步&#xff0c;关闭防火墙&#xff0c;访问nginx ​编辑 3、 离线安装 第一步 安装pcre 第二步…

LeetCode 1531. 压缩字符串 II【动态规划】2575

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Java SE 三个基本注解(JDK内置)+四个元注解

使用注解(Annotation)时要在前面加符号&#xff0c;注解可以当作一个修饰符来修饰他支持的修饰的元素 Override - 重写&#xff0c;该注解只能用于方法 Deprecated - 已弃用&#xff0c;用在程序元素上&#xff0c;如某个类上或者某个方法上 SuppressWarnings - 抑制编译器警告…

【KingbaseES】实现MySql函数Median

本方法只支持在聚合函数窗口中调用 不支持在GROUP BY中使用&#xff0c;使用plsql写的玩意新能都会稍微差一些 建议使用原生方法修改 CREATE OR REPLACE FUNCTION _final_median(numeric[])RETURNS numeric AS $$SELECT AVG(val)FROM (SELECT valFROM unnest($1) valORDER BY …

CSS的特性与简便写法

<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>CSS的三大特性</title> <style> /* 子级继承父级的 继承性*/ body{ font-size: 50px; color: red; } /* 层叠性 */ /* 前面的红色会被后面的蓝色覆盖&a…

服务器感染了.kann勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; 勒索病毒成为当前网络安全领域的一大威胁。.kann勒索病毒是其中的一种变种&#xff0c;对用户的数据造成了极大的威胁。本文91数据恢复将介绍.kann勒索病毒的特征、应对策略以及预防措施&#xff0c;以帮助用户更好地保护个人和组织的数据安全。当面对被勒索…

JavaScript常用事件的类型演示

目录 (一).表单事件(二).UI事件(四).鼠标事件(五).键盘事件 (一).表单事件 1).submit:提交 2).reset&#xff1a;重置 3).change&#xff1a;内容改变且失去焦点时触发 4).input&#xff1a;内容改变时触发&#xff08;兼容性不好&#xff09; 注&#xff1a; submit和res…

vue中动态出来返回的时间秒数,在多少范围显示多少秒,多少范围显示分,小时等等

在Vue中&#xff0c;你可以使用计算属性&#xff08;computed property&#xff09;或过滤器&#xff08;filter&#xff09;来根据动态返回的时间秒数来显示不同的时间单位&#xff0c;比如秒、分、小时等等。 下面是一个使用计算属性的示例&#xff1a; <template>&l…

【Python小游戏】消消乐丨喜羊羊与灰太狼(完整代码)

文章目录 写在前面喜羊羊与灰太狼PyGame入门消消乐注意事项写在后面写在前面 本期内容:基于pygame实现喜羊羊与灰太狼版消消乐小游戏 实验环境 python3.11及以上pycharmpygame安装pygame的命令: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame喜羊羊与灰…

毛虫目标检测数据集VOC格式550张

毛虫&#xff0c;一种令人惊叹的生物&#xff0c;以其独特的外貌和习性&#xff0c;成为了自然界中的一道亮丽风景。 毛虫的外观非常特别&#xff0c;身体呈圆柱形&#xff0c;表面覆盖着许多细小的毛发&#xff0c;这使得它们在叶子上伪装得非常好。它们的头部有一对坚硬的颚…