【机器学习】必会算法模型之:一文掌握 密度聚类,建议收藏。
密度聚类
- 1、引言
- 2、密度聚类
- 2.1 定义
- 2.2 核心原理
- 2.3 实现步骤
- 2.4 算法公式
- 2.5 代码示例
- 3、总结
1、引言
在机器学习的无监督学习领域,聚类是一项基础而重要的任务。
聚类算法通过将数据点分组,使同一组内的数据点具有更大的相似性,而组间差异更大。
虽然 k-means 和层次聚类等经典算法被广泛应用,但它们对处理非球形簇和噪声点时表现欠佳。
密度聚类(Density-Based Clustering)算法因其能有效识别任意形状的簇并处理噪声点而备受关注。
接下来,跟着小鱼一起,来了解密度聚类算法模型。
2、密度聚类
2.1 定义
密度聚类是一种基于数据点密度的聚类方法。
通过识别数据点簇中高密度区域,将彼此相近的数据点归为一类,同时能够将低密度区域内的点标记为噪声。
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是密度聚类中最具代表性的方法之一。
2.2 核心原理
密度聚类的核心思想是通过计算数据点周围的密度来识别簇。
DBSCAN 算法设定了两个重要参数:邻域半径 ( ϵ ) ( \epsilon ) (ϵ) 和最小数据点数 ( m i n P t s ) ( minPts ) (minPts) 。
算法的流程如下:
- 核心点:一个点若其 ( ϵ ) ( \epsilon ) (ϵ) 邻域内包含至少 ( m i n P t s ) ( minPts ) (minPts) 个点,则该点为核心点。
- 密度可达:如果一个点在核心点的 ( ϵ ) ( \epsilon ) (ϵ)邻域内,那么这个点是密度可达的。
- 簇形成:通过核心点及其密度可达的点进行聚类。如果两个核心点之间存在一条密度可到路径,则它们属于同一个簇。
- 噪声点:任何不属于任何簇的数据点被标记为噪声点。
2.3 实现步骤
DBSCAN 算法的具体实现步骤,如下:
- 初始化:标记所有点为未访问。
- 访问数据点:随机选择一个未访问过的数据点,并将其邻域内的所有点标记为访问过。
- 簇扩展:如果该点为核心点,通过递归方式将所有密度可达的点聚为同一个簇。
- 重复:重复步骤2和3,直到所有点被访问。
2.4 算法公式
DBSCAN 主要用到以下几个公式:
-
1、距离计算公式,常用欧几里得距离:
[ d ( p , q ) = ∑ i = 1 n ( p i − q i ) 2 ] [ d(p, q) = \sqrt{\sum_{i=1}^{n}(p_i - q_i)^2} ] [d(p,q)=i=1∑n(pi−qi)2] -
2、 ( ϵ ) − 邻域 ( \epsilon )-邻域 (ϵ)−邻域:
[ N ϵ ( p ) = q ∈ D ∣ d ( p , q ) ≤ ϵ ] [ N_{\epsilon}(p) = {q \in D | d(p, q) \leq \epsilon } ] [Nϵ(p)=q∈D∣d(p,q)≤ϵ] -
3、密度可达和核心点判断:
[ ∣ N ϵ ( p ) ∣ ≥ m i n P t s ] [ |N_{\epsilon}(p)| \geq minPts ] [∣Nϵ(p)∣≥minPts]
2.5 代码示例
# -*- coding:utf-8 -*-
# @Time : 2024-07-20
# @Author : Carl_DJimport numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN# 生成样本数据
X, y = make_moons(n_samples=300, noise=0.05, random_state=0)# 使用 DBSCAN 进行密度聚类
dbscan = DBSCAN(eps=0.2, min_samples=5)
y_pred = dbscan.fit_predict(X)# 绘制聚类结果
plt.figure(figsize=(10, 6))
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='viridis', marker='o')
plt.title('DBSCAN Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
解析
- 生成数据:使用 make_moons 函数生成两个半环形状的数据集,这种数据形状适合密度聚类算法处理。
- 初始化 DBSCAN:设置邻域半径 ( \epsilon ) 为 0.2,最小数据点数 ( minPts ) 为 5。
- 进行聚类 :使用 fit_predict 方法进行聚类,获取聚类标签 y_pred。
- 绘制结果:将聚类结果可视化,不同的颜色表示不同的簇,能够清晰看到簇的边界和噪声点。
3、总结
密度聚类(DBSCAN)作为一种基于密度的聚类算法,能够有效地识别任意形状的簇并处理噪声点。与传统的聚类算法相比,密度聚类在处理噪声和非球形簇时表现尤为出色。通过设定合适的参数 ( ϵ ) ( \epsilon ) (ϵ) 和 ( m i n P t s ) ( minPts ) (minPts),我们可以对复杂的数据集进行准确的聚类。掌握密度聚类的原理和实现方法,对于从事数据分析和机器学习的研究人员和工程师来说十分重要。希望本文能够帮助读者更好地理解和应用密度聚类算法。
我是小鱼:
- CSDN 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 企业认证金牌面试官;
- 多个名企认证&特邀讲师等;
- 名企签约职场面试培训、职场规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)评测一等奖获得者;
关注小鱼,学习【机器学习】&【深度学习】领域的知识。
相关文章:

【机器学习】必会算法模型之:一文掌握 密度聚类,建议收藏。
密度聚类 1、引言2、密度聚类2.1 定义2.2 核心原理2.3 实现步骤2.4 算法公式2.5 代码示例 3、总结 1、引言 在机器学习的无监督学习领域,聚类是一项基础而重要的任务。 聚类算法通过将数据点分组,使同一组内的数据点具有更大的相似性,而组间…...

代码:前端与数据库交互的登陆界面
<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>登录</title> </head> <body>…...

发电机基础知识:负载组
什么是发电机负载组? 简单地说,负载组是一种可以产生人工电力负载的设备,用于测试发电机并验证发电机组的性能,包括相关组件,以确保通过使发电机发动机达到适当的工作温度和压力来满足适当的负载。 它是如何工作的&a…...

内网安全:各类密码的抓取
Mimikatz在线读取SAM文件 离线读取SAM文件 在线读取lsass进程 离线读取lsass进程 BrowserGhost浏览器密码抓取 Sharp-HackBrowserData浏览器密码抓取 SharpDecryptPwd数据库密码抓取 LaZagne各类密码的抓取 Windows其他类型抓NTLM Hash工具 sam文件和lsass进程就是Wind…...
前端面试题汇总2
1. CSS 中两个 .class1 .class2 从哪个开始解析 在 CSS 中,选择器 .class1 .class2 表示所有 class 为 class1 的元素中的 class 为 class2 的子元素。浏览器解析这个选择器时,从右向左解析。也就是说,浏览器首先找到所有 class 为 class2 的…...

分布式服务框架zookeeper+消息队列kafka
一、zookeeper概述 zookeeper是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务,状态同步,配置中心,集群管理等。 在分布式环境下,经常需要对应用/服…...

服务攻防-应用协议cve
Cve-2015-3306 背景: ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行,…...

Springcloud之gateway的使用详解
官网地址:https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom: <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…...

中望CAD 建筑 v2024 解锁版下载、安装教程 (超强的CAD三维制图)
前言 中望CAD建筑版是一款国产CAD制图软件,专注于建筑设计领域。中望CAD建筑版拥有丰富多样的建筑图块和图案,完美兼容各类建筑图纸。同时,它提供了绘图标准规范,使绘图更加规范和专业。更值得一提的是,该软件还具备智…...

windows edge自带的pdf分割工具(功能)
WPS分割pdf得会员,要充值!网上一顿乱找,发现最简单,最好用,免费的还是回到Windows。 Windows上直接在edge浏览器打开PDF,点击 打印 按钮,页面下选择对应页数 打印机 选择 另存为PDF,然后保存就…...

HTML5实现好看的天气预报网站源码
文章目录 1.设计来源1.1 获取天气接口1.2 PC端页面设计1.3 手机端页面设计 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4…...

比较(八)利用python绘制指示器
比较(八)利用python绘制指示器 指示器(Indicators)简介 指示器是一系列相关图的统称,主要用于突出展示某一变量的实际值与目标值的差异,例如常见的数据delta、仪表盘、子弹图、水滴图等。 快速绘制 基于p…...

【体外诊断】ARM/X86+FPGA嵌入式计算机在医疗CT机中的应用
体外诊断 信迈科技提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板,以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显,提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口,扩展性强&…...

力扣 28找到字符串中第一个匹配项的下标 KMP算法
思路: 朴素匹配有很多步骤是多余的 KMP算法能够避免重复匹配 KMP算法主要是根据子串生成的next数组作为回退的依据,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 这里讲一下为什么用模式串的最大公共前后缀…...
JavaScript(10)——匿名函数
匿名函数 没有名字的函数,无法直接使用。 使用方式: 函数表达式立即执行函数 函数表达式 将匿名函数赋值给一个变量,并且通过变量名称进行调用 let fn function(){ 函数体 } 调用: fn() 立即执行函数 语法: (function () {…...

图片上传成功却无法显示:静态资源路径配置问题解析
1、故事的背景 最近,有个学弟做了一个简单的后台管理页面。于是他开始巴拉巴拉撘框架,写代码,一顿操作猛如虎,终于将一个简单的壳子搭建完毕。但是在实现功能:点击头像弹出上传图片进行头像替换的时候,卡壳…...

【转盘案例-弹框-修改Bug-完成 Objective-C语言】
一、我们来看示例程序啊 1.旋转完了以后,它会弹一个框,这个框,是啥, Alert 啊,AlertView 也行, AlertView,跟大家说过,是吧,演示过的啊,然后,我们就用iOS9来做了啊,完成了以后,我们要去弹一个框, // 弹框 UIAlertController *alertController = [UIAlertContr…...
Perl 基础语法
Perl 基础语法 Perl 是一种高级、解释型、动态编程语言,广泛用于CGI脚本、系统管理、网络编程、以及其他领域。Perl 以其强大的文本处理能力和简洁的语法而闻名。本文将详细介绍 Perl 的基础语法,帮助读者快速入门。 1. Perl 变量和数据类型 1.1 变量…...
【嵌入式开发之标准I/O】二进制文件的读写及实验
文本文件和二进制的区别 文本文件和二进制文件的区别主要在于它们的编码方式和数据组织方式。 编码方式:文本文件是基于字符编码的文件,常见的编码有ASCII编码、UNICODE编码等。这些编码将字符映射到特定的二进制值,使得字符可以…...

Arduino学习笔记1——IDE安装与起步
一、IDE安装 去浏览器直接搜索Arduino官网,点击Software栏进入下载界面,选择Windows操作系统: 新版IDE下载不需要提前勾选所下载的拓展包,下载好后直接点击安装即可。 安装好后打开Arduino IDE,会自动开始下载所需的…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...