当前位置: 首页 > news >正文

【机器学习】必会算法模型之:一文掌握 密度聚类,建议收藏。

密度聚类

  • 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=1n(piqi)2 ]

  • 2、 ( ϵ ) − 邻域 ( \epsilon )-邻域 (ϵ)邻域:
    [ N ϵ ( p ) = q ∈ D ∣ d ( p , q ) ≤ ϵ ] [ N_{\epsilon}(p) = {q \in D | d(p, q) \leq \epsilon } ] [Nϵ(p)=qDd(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博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)评测一等奖获得者

关注小鱼,学习【机器学习】&【深度学习】领域的知识。

http://www.lryc.cn/news/404459.html

相关文章:

  • 代码:前端与数据库交互的登陆界面
  • 发电机基础知识:负载组
  • 内网安全:各类密码的抓取
  • 前端面试题汇总2
  • 分布式服务框架zookeeper+消息队列kafka
  • 服务攻防-应用协议cve
  • Springcloud之gateway的使用详解
  • 中望CAD 建筑 v2024 解锁版下载、安装教程 (超强的CAD三维制图)
  • windows edge自带的pdf分割工具(功能)
  • HTML5实现好看的天气预报网站源码
  • 比较(八)利用python绘制指示器
  • 【体外诊断】ARM/X86+FPGA嵌入式计算机在医疗CT机中的应用
  • 力扣 28找到字符串中第一个匹配项的下标 KMP算法
  • JavaScript(10)——匿名函数
  • 图片上传成功却无法显示:静态资源路径配置问题解析
  • 【转盘案例-弹框-修改Bug-完成 Objective-C语言】
  • Perl 基础语法
  • 【嵌入式开发之标准I/O】二进制文件的读写及实验
  • Arduino学习笔记1——IDE安装与起步
  • 一个注解解决重复提交问题
  • 在qt的c++程序嵌入一个qml窗口
  • Vue的依赖注入:组件树中的共享数据与功能
  • softmax 函数的多种实现方式 包括纯C语言、C++版本、Eigen版本等
  • R语言学习笔记11-读取csv-xlsx-txt-json-pdf-lua格式文件
  • Vue的计算属性和方法有什么区别
  • 学生成绩管理系统(C语言)
  • C语言 通讯录管理 完整代码
  • 2024北京国际智能工厂及自动化展览会亮点前瞻
  • 《网络安全等级保护制度详解》
  • 使用Wanderboat AI 来规划到巴黎的旅行计划