详解机器学习经典模型(原理及应用)——DBSCAN

一、概念

        DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够在具有噪声的空间数据集中发现任意形状的聚类(即带噪声的聚类模型)。DBSCAN将簇定义为密度相连的点的最大集合,通过在数据空间中找到高密度区域作为簇,同时把孤立点(密度低的点)归为噪声。此外,DBSCAN最大的优势就是它不需要指定聚类簇的数量

二、模型原理

1、相关概念

  • ε-邻域(Epsilon-neighborhood):对于某个点p,以半径ε为边界的区域内所有的点称为该点的ε-邻域。
  • 核心点(Core Point):如果一个点p的ε-邻域内至少有min_samples个点(包括p自己),那么它被称为核心点。
  • 边界点(Border Point):如果一个点p在某个核心点的ε-邻域内,但自身不是核心点,它被称为边界点。
  • 噪声点(Noise Point):如果一个点既不是核心点,也不属于任何核心点的邻域,它被认为是噪声点。
  • 密度直达(Directly Density-Reachable):如果点p是核心点,并且点q在p的ε-邻域内,那么q被称为从p密度直达。
  • 密度可达(Density-Reachable):如果存在一条核心点链表(p1→p2→...→pn),使得每个点从前一个点密度直达,且p1=p,pn=q,则q是从p密度可达的。
  • 密度相连(Density-Connected):如果存在一个点o,使得p和q都从o密度可达,则称p和q是密度相连的。

2、算法流程

(1)初始化

  • 遍历数据集中的每个点p。
  • 对于每个点p,找到其ε-邻域(由我们定义,需要多次尝试找到最优值)内的所有点。

(2)形成聚类

  • 如果p是核心点,创建一个新的聚类C,并将p添加到C。
  • 将p的 ε-邻域内的所有直接密度可达的点添加到C。
  • 递归地,将这些点的直接密度可达的点添加到C。

(3)处理边界点和噪声

  • 如果一个点不是核心点,也不是任何核心点的直接密度可达点,则将其标记为噪声。需要注意的是,噪声点的数量跟ε参数和min_samples参数的取值有关,在不同的取值范围内,点A可能是噪声,也可能是核心点。

(4)合并聚类

  • 如果两个聚类密度相连,则将它们合并为一个聚类。

三、python示例

        这里我们使用iris数据集,由于这个数据集的数据量很少,因此如果min_samples设置得稍微大一点,模型就会将所有的点都看作噪声。最佳参数可以通过网格搜索并结合聚类评估指标来确定。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target# 数据预处理:标准化特征值
X_scaled = StandardScaler().fit_transform(X)# 创建DBSCAN模型实例
# eps 是邻域的大小,min_samples 是形成聚类所需的最小样本数
dbscan = DBSCAN(eps=0.2, min_samples=2)# 执行聚类
clusters = dbscan.fit_predict(X_scaled)# 可视化聚类结果
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=clusters, cmap='viridis', marker='o')
plt.title('DBSCAN Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.colorbar(label='Cluster Label')
plt.show()# 打印聚类结果的统计信息
n_clusters_ = len(set(clusters)) - (1 if -1 in clusters else 0)  # 减去噪声点
n_noise_ = list(clusters).count(-1)
print(f'Estimated number of clusters: {n_clusters_}')
print(f'Estimated number of noise points: {n_noise_}')

四、总结

        DBSCAN是探索性数据分析、数据挖掘中常用的机器学习模型。由于我们在初期数据探索和挖掘阶段,无法很好地确定数据应当聚成多少类,因此K-Means等需要指定聚类簇数量的模型显得不那么有效了。通过调整DBSCAN模型的邻域半径和最小簇内样本数,并结合轮廓系数等聚类评估方法,可以有效地帮助我们自动将数据聚合成相对有意义的N个类簇,从而辅助我们进行数据探索和分析。例如,在NLP领域,尤其是热点挖掘、观点分析等业务中,DBSCAN以及它的优化版变体HDBSCAN都是建模利器。

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

阿托伐他汀降脂疗效与安全性真实世界数据整理!

2024年9月,《中国医疗保险》杂志发布了题为《阿托伐他汀仿制药治疗高脂血症疗效与安全性的多中心回顾性队列研究》的重要研究结果。该研究由首都医科大学宣武医院牵头,联合上海交通大学医学院附属瑞金医院、吉林大学第一医院等10家国内顶尖三甲医院共同完…

深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅

​​​​​​​ 🌟个人主页:落叶 🌟当前专栏: C专栏 目录 继承的概念及定义 继承的概念 继承定义 定义格式 继承基类成员访问⽅式的变化 继承类模板 基类和派⽣类间的转换 继承中的作⽤域 隐藏规则 成员函数的隐藏 考察继承【作⽤…

“嵌入”在大语言模型中是解决把句子转换成向量表示的技术

上一篇:《人工智能是这样理解“情绪”的》 序言:这段话要优化吗?““嵌入”是一种将句子、单词或其他语言单位转换为向量表示的技术。这个向量通常位于高维空间中,它以一种能够表达相似性的方式编码出文本的含义或上下文。嵌入层…

操作系统——内存分区管理

本章主要讨论为什么要给内存进行划分和如何划分的问题。 为了给每一个进程都分配一个大小合适的内存块 以连续存储进程的程序和数据,使得各进程可以并发执行 目录 一、内存的划分方法 1、固定分区法 2、动态分区法 3、动态分区的数据管理结构 二、分区的分配与回…

ML 系列: 第 24 节 — 离散概率分布(泊松分布)

目录 一、说明 二、固定时间间隔示例 三、固定间隔的示例 四、泊松分布的主要特征 五、示例 5.1 平均客户数的计算: 5.2 用于计算和绘制泊松分布的 Python 代码: 一、说明 泊松概率分布是一种离散概率分布,它表示在固定的时间或空间间隔内发生…

【comfyui教程】如何用 ComfyUI 修复和上色老照片?详细教程让老照片焕发新生

前言 如何用 ComfyUI 修复和上色老照片?详细教程让老照片焕发新生 老照片承载着无数回忆,可时光不饶人,随着岁月流逝,它们渐渐变得模糊、泛黄,甚至出现了褪色、裂痕。对于想要留住这份珍贵记忆的人来说,修…

ThinkServer SR658H V2服务器BMC做raid与装系统

目录 前提准备 一. 给磁盘做raid 二. 安装系统 前提准备 磁盘和系统BMC地址都已经准备好,可正常使用。 例: 设备BMC地址:10.99.240.196 一. 给磁盘做raid 要求: 1. 将两个894G的磁盘做成raid1 2. 将两块14902G的磁盘各自做…

BUUCTF pwn2_sctf_2016 int 0x80方法

本文目的 BUUCTF的PWN的第一页的pwn2_sctf_2016的libc不适用辣,但网上一搜全是libc 然后怎么办嘞,都明摆着有个int 0x80,当然是用啊 所以水一篇 早上中午晚上好 老三样,下载程序,打开ida,拖进去 一眼好几…

如何构建一个功能强大的低代码平台网站?关键步骤与技巧全解析

随着数字化转型的加速,企业对敏捷开发和快速迭代的需求越来越迫切。低代码平台应运而生,成为连接业务需求和技术实现的重要桥梁。低代码平台不仅能够大幅降低技术门槛,还能够通过可视化界面和预配置组件简化开发流程,帮助企业快速…

Unity图形学之Shader2.0 模板测试

1.模版测试:符合条件的 通过 不符合条件的 像素 丢弃 比较公式: if((referenceValue&readMask) comparisonFunction (stencilBufferValue&readMask)) 通过像素 else 抛弃…

RK3588 快速上手

1、资料介绍 我的开发板是临滴科技的LKD3588,相关的官网上都可以找到,我这里给大家一个网盘链接 LKD3588-开发板(公开资料) https://pan.baidu.com/s/1snYcWY-S4rLMCE_3nGlHrw?pwd3588 LKD3588-开发板(保密资料&…

STM32完全学习——点亮LED灯

一、寄存器描述 首先我们知道STM32对外设的操作,是靠对寄存器的设置来完成的。因此我们想要点亮LED灯,就需要知道端口的控制寄存器,然后给寄存器设置不同的值就可以让端口来输出0或1,首先我这里使用的是GPIOA这个端口的0-8位来做…

【Python】如何使用Python-Tkinter打造炫酷动态心形动画 !保姆级教程

文章目录 教程:从零开始,逐步实现动态心形动画环境准备第一步:导入必要的模块第二步:定义画布参数第三步:定义心形生成函数第四步:实现点的散布与收缩第五步:定义曲线函数第六步:创建…

基于SSM的“家政预约管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“家政预约管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 家政预约管理系统功能结构图 系统首页界面 用户注册界面 家政…

MongoDB在现代Web开发中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 MongoDB在现代Web开发中的应用 引言 MongoDB 概述 定义与原理 发展…

springboot企业信息管理系统,计算机毕业设计项目源码310,计算机毕设程序(LW+开题报告、中期报告、任务书等全套方案)

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,员工信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

【JAVA毕业设计】基于Vue和SpringBoot的周边产品销售网站

博主说明:本文项目编号 T 061 ,文末自助获取源码 \color{red}{T061,文末自助获取源码} T061,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

YOLOV8应用|排球垫球计数|附带全部数据集与源码(见文末百度云盘链接)

项目简介: 该项目旨在利用YOLOv8算法实现排球垫球动作的自动识别与计数。YOLOv8作为计算机视觉领域的先进目标检测算法,具备高精度和实时性的特点,非常适合用于体育训练和测试中的自动化计数。项目将排球垫球视频作为输入,通过YOLOv8算法检测视频中的排球及垫球动作,自动…

【工具变量】上市公司企业生产经营效率数据集(1990-2023年)

一、计算说明: 参考《数量经济技术经济研究》沈坤荣(2024)老师的研究,为了度量企业生产经营效率,选取管理费用率(manage_cost)、营运资金周转率(fund_turn)和总资产周转…

Openstack10--认证服务(Keystone)安装

在控制节点安装认证服务组件 yum -y install openstack-keystone httpd mod_wsgi 其中“openstack-keystone”是Keystone的软件包;“httpd”是阿帕奇(Apache)Web服务器的软件包名;“mod_wsgi”是使Web服务器支持WSGI的插件。 进…