聚类算法—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 : PyCharm

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.cluster import dbscan
import matplotlib.pyplot as plt

X, _ = 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 和 b
    a = 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024-6-3 石群电路-22

2024-6-3,星期一,20:45,天气:晴,心情:阴转晴。今天没有发生了一些令人不开心事情,心情有些差,不过还是调整过来了,活好自己,就是对你讨厌的人最大的惩罚。因为…

jdk的组成和跨平台原理

为什么 1.笔试会用到 2. 方便理解程序的运行 java跨平台的原因: sun公司提供了各种平台可以使用的jvm,所以java将程序一次编译成字节码之后可以给各种平台运行。这也是java这么多年深受欢迎的原因

GB28181安防视频融合汇聚平台EasyCVR如何实现视频画面自定义标签?

安防视频融合汇聚平台EasyCVR兼容性强,可支持Windows系统、Linux系统以及国产化操作系统等,平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-FLV、…

Fatfs

STM32进阶笔记——FATFS文件系统(上)_stm32 fatfs-CSDN博客 STM32进阶笔记——FATFS文件系统(下)_stm32 文件系统怎样获取文件大小-CSDN博客 STM32——FATFS文件基础知识_stm32 fatfs-CSDN博客 021 - STM32学习笔记 - Fatfs文件…

IDEA配置Java远程调试,以CVE-2024-4956为例

背景 学习代码审计,看到一些Java的漏洞,想要动手调试,复现漏洞搭建环境可以使用docker快速创建,了解到Java可以远程调试,本文记录学习Java远程调试环境搭建的过程。 远程调试的原理 如下图(图源&#xf…

无人值守设备远程运维,几个关键问题如何解决?

商用无人值守设备承载着很多企业的一线业务,它们分布广泛且数量众多,企业如何对这类设备实施有效的运维管理是一个重要的课题。 面对这一问题,很多企业选择了引入远程运维方案,以远程桌面为基础工具实施远程运维管理,…

安卓玩机搞机技巧综合资源----电脑控制手机 投屏操控的软件工具操作步骤解析【二十二】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

1、Tomcat整体架构

1、Tomcat整体架构 Tomcat介绍Tomcat概述Tomcat目录结构web应用部署的三种方式 Tomcat整体架构分析Tomcat架构图Tomcat核心组件Server 组件Service组件连接器Connector组件容器Container组件结合Server.xml理解Tomcat架构请求定位 Servlet 的过程 Tomcat架构设计精髓Connector高…

netty LengthFieldBasedFrameDecoder 根据动态长度分包粘包

如下数据格式 在方法: // Integer.MAX_VALUE, // maxFrameLength: 最大允许的帧长度// 4, // lengthFieldOffset: 长度字段在帧中的偏移量,这里是在帧头之后// 4, // lengthFieldLength: 长度字段的长度,4字节表示32位整数// 0, // …

常见4种时间管理方法及实施步骤(收藏版)

有效的时间管理方法,不仅能够保证项目按时交付,还能提高开发效率,减少成本超支和质量风险。如果缺乏明确的时间规划,可能会导致任务延误;容易造成资源分配不当,导致整体效率低下和成本增加。 因此有效的时间…

go语言实现微信扫码登录,涵盖微信登录超详细流程并附带时序图

微信扫码登录 1. 简述:此文章目的主要是web网站进行微信扫码登录2. 微信登录过程时序图3. 全部微信登录组成元素3.1. 微信扫码登录后端总共只需要两个接口,3.2. 微信登录的各个对象:3.3. 微信登录的主要参数: 4. 流程解释&#xf…

基于Android Studio 垃圾分类助手App--原创

一、高质量源码(非开源,白嫖低价勿扰) 关注公众号:《编程乐学》 后台回复:24060301 二、项目演示视频 基于Android Studio 垃圾分类助手App--原创 三、开发环境 四、设计与实现 1.启动页 1.设置延迟三秒后执行 runna…

HDL-A/1-110VAC-2电流继电器 JOSEF约瑟 导轨安装

一. 应用 HDL系列电流继电器是静态型,不带方向性的、瞬动、交流电流继电器。可用于电力系统输电线,电机过负荷和短路保护中,作为启动元件。 继电器对短路电流中的直流分量不敏感,因此可用于要求哲态超小的线路中,改继电器由集成…

SpringBoot启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图(五)

SpringBoot启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图(五) 参考 目录 文章目录 SpringBoot启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图(五)1、设置sping.beaninfo.ignore属性2、…

一文带你搞懂单模光纤和多模光纤的区别

单模光纤和多模光纤的区别及常见疑问解答 随着网络技术的飞跃,光纤因其高速传输与大容量特性,成为通信领域的佼佼者。光纤主要分为单模与多模,两者在几何与传输特性上迥异,实际应用中表现显著不同。本文将深入剖析两者的差异与应用…

记一次黑群晖折腾的过程

Tips: 建议先完整看完这篇文章,理解大致流程后再上手操作,其中有一些注意点需要事先了解 安装黑群晖的教程网上很多,我是参考了这篇: https://post.smzdm.com/p/am3epen4/前言在上一盘文章中组装了一台黑群晖&#…

Docker基础篇之将本地镜像发布到私有库

文章目录 1. Docker Registry简介2. 将本地镜像推送到私有库 1. Docker Registry简介 Docker Registry是官方提供的工具,可以用于构建私有镜像仓库。 2. 将本地镜像推送到私有库 下载Docker Registry docker pull registry现在我们可以从镜像中看到下载的Regist…

数据持久化第七课-URL重写与Ajax

数据持久化第七课-URL重写与Ajax 一.预习笔记 1.URL重写(对网页地址进行保护) 首先编写module,实现对网络地址的处理 其次就是module的配置 最后验证url重写技术 2.Ajax数据交互 编写后端响应数据 处理跨域的配置问题 运行项目得到后端响应数据的地址 编写前端ajax进行数据请…

基于VGG16的猫狗数据集分类

目录 1. 作者介绍2. VGG16介绍2.1 背景介绍2.2 VGG16 结构 3. Cat VS Dog数据集介绍4. 实验过程4.1 数据集处理4.2 训练部分设置4.3 训练结果4.4 问题分析4.5 单张图片测试 5.完整训练代码与权重参考文献 1. 作者介绍 孙思伟,男,西安工程大学电子信息学…

Accelerate 笔记:保存与加载文件

保存和加载模型、优化器、随机数生成器和 GradScaler 使用 save_state() 将上述所有内容保存到一个文件夹位置使用 load_state() 加载之前通过 save_state() 保存的状态通过使用 register_for_checkpointing(),可以注册自定义对象以便自动从前两个函数中存储或加载 …