聚类算法—DBSCAN算法

文章目录

  • DBSCAN算法
    • 基本概念
      • 1个核心思想:基于密度
      • 2个算法参数:邻域半径R和最少点数目minpoints
      • 3种点的类别:核心点,边界点和噪声点
      • 4种点的关系:密度直达,密度可达,密度相连,非密度相连
    • DBSCAN算法步骤
    • DBSCAN代码
  • 参考文献

DBSCAN算法

DBSCAN算法是一个基于密度、对噪声鲁棒的空间聚类算法:DB-SCAN可以找到样本点的全部密集区域,把这些密集区域当做一个一个的聚类簇
DB-SCAN算法的特点:

  1. 基于密度,对远离密度核心的噪声点鲁棒
  2. 无需知道聚类簇的数量
  3. 可以发现任意形状的聚类簇

基本概念

1个核心思想:基于密度

DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇
在这里插入图片描述

2个算法参数:邻域半径R和最少点数目minpoints

这两个算法参数在刻画什么叫密集:当邻域半径R内的点的个数大于最少点数目minpoints时,就是密集
在这里插入图片描述

3种点的类别:核心点,边界点和噪声点

  1. 核心点:如果一个点P在半径\varepsilon内拥有超过minpoints个的点(包括点P自身),则点P被认为是一个核心点
  2. 边界点:如果一个点不是核心点,但在某个核心点的\varepsilon范围内,并且至少是minpoints-1个核心点的密度直达点,则这个点被认为是边界点
  3. 噪声点:如果一个点既不是核心点,也不是任何核心点的密度可达点,则被认为是噪声点
    在这里插入图片描述

4种点的关系:密度直达,密度可达,密度相连,非密度相连

  1. 密度直达:如果P为核心点,Q在P的R邻域内,那么称P到Q密度直达。任何核心点到其自身密度直达,密度直达不具有对称性,如果P到Q密度直达,那么Q到P不一定密度直达(Q不一定是核心点,在Q的\varepsilon邻域内没有足够的点,不能将P包含在其密度直达性簇内)
  2. 密度可达:如果存在核心点P2,P3,……,Pn,且P1到P2密度直达,P2到P3密度直达,……,P(n-1)到Pn密度直达,Pn到Q密度直达,则P1到Q密度可达,密度可达也不具有对称性
  3. 密度相连:如果存在核心点S,使得S到P和Q都密度可达,则P和Q密度相连。密度相连具有对称性,如果P和Q密度相连,那么Q和P也一定密度相连,密度相连的两个点属于同一个聚类簇
  4. 非密度相连:如果两个点不属于密度相连关系,则两个点非密度相连。非密度相连的两个点属于不同的聚类簇,或者其中存在噪声点
    在这里插入图片描述

DBSCAN算法步骤

聚类簇(Cluster):由一个核心点P和所有从P密度可达的点组成

  1. 寻找核心点形成临时聚类簇
    扫描全部样本点,如果某个样本点R半径范围内点数目>=minpoints,则将其纳入核心点列表,并将其密度直达的点形成对应的临时聚类簇
  2. 合并临时聚类簇得到聚类簇
    重复此操作,直到当前临时聚类簇中的每一个点要么不在核心点列表,要么其密度直达的点都已经在该临时聚类簇,该临时聚类簇升级成为聚类簇
    在这里插入图片描述

DBSCAN代码

# --*-- coding:utf-8 --*--
# @Author : 一只楚楚猫
# @File : 05DBSCAN.py
# @Software : PyCharmimport numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.cluster import dbscan
import matplotlib.pyplot as pltX, _ = datasets.make_moons(n_samples=500, noise=0.1, random_state=1)
df = pd.DataFrame(X, columns=['feature1', 'feature2'])df.plot.scatter('feature1', 'feature2', s=100, alpha=0.6, title='dataset by make_moon')
plt.show()"""
eps为邻域半径,min_samples为最少点数目
cluster_ids中-1表示对应的点为噪声点
"""
core_samples, cluster_ids = dbscan(X, eps=0.2, min_samples=20)"""
np.c_ 是 NumPy 库中的一个函数,用于沿着列(列优先)堆叠数组# 假设有两个一维数组 a 和 ba = np.array([1, 2, 3])b = np.array([4, 5, 6])c = np.c_[a, b][[1 4][2 5][3 6]]
"""
df = pd.DataFrame(np.c_[X, cluster_ids], columns=['feature1', 'feature2', 'cluster_id'])"""
astype('i2') 是一个用于转换数据类型的方法,将 'cluster_id' 列的数据类型转换为 16 位整数(int16 或 i2)
"""
df['cluster_id'] = df['cluster_id'].astype('i2')"""
c = list(df['cluster_id']): c 参数指定了每个点的颜色,这里使用 list() 函数将 DataFrame 中 'cluster_id' 列的值转换成列表,列表中的每个元素对应一个点的颜色
cmap = 'rainbow': cmap 参数设置颜色映射表,用于根据 'cluster_id' 列的值为散点图上的点分配颜色。'rainbow' 是一个预设的颜色映射,它将按照彩虹的颜色顺序为不同的聚类分配颜色
colorbar = False: 这个参数决定是否在散点图旁边显示颜色条,颜色条用于显示颜色和 'cluster_id' 值之间的映射关系
"""
df.plot.scatter('feature1', 'feature2', s=100, c=list(df['cluster_id']), cmap='rainbow', colorbar=False, alpha=0.6,title='DBSCAN cluster result')
plt.show()

参考文献

1、图解机器学习 | 聚类算法详解:https://www.showmeai.tech/article-detail/197
2、20分钟学会DBSCAN聚类算法:https://cloud.tencent.com/developer/article/1664886
3、ChatGPT

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

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

相关文章

3131. 找出与数组相加的整数 I

给你两个长度相等的数组 nums1 和 nums2。 数组 nums1 中的每个元素都与变量 x 所表示的整数相加。如果 x 为负数,则表现为元素值的减少。 在与 x 相加后,nums1 和 nums2 相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时&…

Spi Pwm Tim 对比分析

spi SPI时序图 (spi是主从机 所以主机需要从机数据 需要主极先喊从机 把从机喊答应了 才能开始读从机的数据) cpol时钟极性 和cpha时钟相位分析 1.cpha为高,cpol为高,则偶数上升沿有效 2.cpha为高,cpol为低,则偶数…

JVM之【GC-垃圾清除算法】

Java虚拟机(JVM)中的垃圾收集算法主要分为以下几种: 标记-清除算法(Mark-Sweep)复制算法(Copying)标记-整理算法(Mark-Compact)分代收集算法(Generational C…

vue3+three.js给glb模型设置视频贴图

1.在网上下载一个显示屏或者自己画一个,在blender中设置好显示屏的Mesh,UV设置好,这样方便代码中添加纹理贴图。可以让美术在建模软件中,先随机设置一张图片作为纹理,验证UV是否设置好 关于如何 在blender中给模型设置UV贴图百度很多的 // 视频 import * as THREE from…

MacOS13-将数据库转为markdown,docx格式

MacOS13-将数据库转为markdown,docx格式 文章目录 先说踩坑点各种模块缺失 代码效果总结参考 先说踩坑点 各种模块缺失 tkinter mysql 没错,你可以直接点击安装; 如果还出现报错 你需要打开终端 pip install mysqlclient再次点进去安…

xcode开发swift允许发送http请求设置

Xcode 现在新建项目默认只支持HTTPS请求,认为HTTP请求不安全,所以不支持。但是开发环境一般都是http模式,所以需要单独配置才可以访问。 需要到项目的设置里面,点击info,如果没有App Transport Security Setting这一项…

项目优化方案之---实现邮箱用户登录

之前的项目中我写的基于SpringBoot和Vue的全栈项目已经实现了基本的用户接口开发, 不过其代码的功能单一,而且写的也是有不少漏洞(基本就像刚接手的代码*山一样) 那之后的几篇文章都来分享一下如何优化项目(每一章都独…

Python优化、异常处理与性能提升技巧

Python作为一种高效的编程语言,其灵活性和强大的功能使得它成为了许多开发者的首选。在日常的编程实践中,掌握一些高效的Python技巧可以极大地提升开发效率和代码质量。本文将介绍五个关于Python使用技巧,帮助你更加熟练地运用Python解决问题…

JMeter性能测试实现与分析分享

JMeter是由著名开源软件巨头Apache组织开发的纯Java的压力测试工具,它即能测试动态服务(WebService),也能测试静态资源,包括Servlet服务、CGI脚本等,还能测试动态语言服务(PHP、Java、ASP.NET等…

Cocos Creator开发学习路线

1.JavaScript与TypeScript程序设计 由于可以跨平台发布,同时要能支持h5的游戏,cocos creator选择了JavaScript与TypeScript来做为它的开发语言,所以我们要先学习JavaScript与TypeScript。TypeScript是基于JavaScript的一个语法糖,运行的时候被编译为JavaScript,所以我们要…

JVM学习-监控工具(二)

jmap:导出内存映像文件&内存使用情况 基本情况 jmap(JVM Memory Map):一方法获取dump文件(堆转储快照文件,二进制文件),还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、…

MyBatis学习(二)--MyBatis获取参数值的两种方式

1、搭建新的module:mybatis_parameter MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,采用sql拼接,无法防止sql注入 #{}的本质就是占位符赋值 ,采用预编译 防止sql注入 不同参数使用案例 2、单个字面量类型…

OpenHarmony嵌套类对象属性变化:@Observed装饰器和@ObjectLink装饰器

上文所述的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的数据模型。对于多层嵌套的情况,比如二维数组,或者数组项class,或者class的属性是class,他们的第二…

实时瞳孔分割算法-RITnet论文复现

源代码在这里RITnet-Github 这个模型比较小众,我们实验室使用了官方提供的模型进行瞳孔中心位置提取,以实现视线追踪,效果很好 一、数据集准备 RITnet也是那一届openEDS数据集挑战赛的冠军模型,openEDS数据集可以从Kaggle上下载&a…

数据结构--关键路径

事件v1-表示整个工程开始(源点:入度为0的顶点) 事件v9-表示整个工程结束(汇点:出度为0的顶点) 关键路径:路径长度最长的路径 求解关键路径问题(AOE网) 定义四个描述量 …

网络网络层之(6)ICMPv4协议

网络网络层之(6)ICMPv4协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…

华为OD刷题C卷 - 每日刷题 7(字符串分隔(二)、欢乐的周末)

两段代码分别解决了两个不同的问题,下面是对它们的概述: 1、(字符串分隔(二)): 这段代码是解决“字符串分隔(二)”的问题。它提供了一个Java类Main,其中包含…

Java面试题-Tomcat高级面试题

Tomcat 9相较于之前的版本有哪些主要的新特性? Tomcat 9相较于之前的版本,主要有以下几个新特性: HTTP/2支持:Tomcat 9引入了对HTTP/2协议的支持,这可以显著提高网站的性能和安全性。HTTP/2协议允许单个连接上进行多…

多语言for循环遍历总结

多语言for循环遍历总结 工作中经常需要遍历对象,但不同编程语言之间存在一些细微差别。为了便于比较和参考,这里对一些常用的遍历方法进行了总结。 JAVA 数组遍历 Test void ArrayForTest() {String[] array {"刘备","关羽", &…

大模型备案项目补贴政策一览【保持更新】

大模型项目、AI类项目、大模型备案通过后等一篮子财政补贴政策 上海市 加快创新体系构建 1. 提升自主创新水平:对引领大模型发展或取得颠覆性突破的项目,最高给予1000万元补贴支持。 2. 加强算力资源保障:实施算力伙伴计划,对…