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

Scikit-learn Python机器学习 - 聚类分析算法 - DBSCAN(基于密度的噪声应用空间聚类)

锋哥原创的Scikit-learn Python机器学习视频教程:

https://www.bilibili.com/video/BV11reUzEEPH

课程介绍


本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。

Scikit-learn Python机器学习 - 聚类分析算法 - DBSCAN(基于密度的噪声应用空间聚类)

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,由Martin Ester、Hans-Peter Kriegel、Jörg Sander和Xiaowei Xu于1996年提出。与K-means等基于距离的聚类方法不同,DBSCAN能够发现任意形状的簇,并且能够识别出噪声点。

DBSCAN的基本概念
  1. 核心点(Core Point)

    • 如果某个点的ε邻域内(半径为ε的区域)包含至少MinPts个点(包括该点本身),则该点被认为是核心点。

  2. 边界点(Border Point)

    • 边界点是指不属于核心点,但位于某个核心点的ε邻域内的点。边界点的邻域内的点数小于MinPts,因此不能形成核心点。

  3. 噪声点(Noise Point)

    • 如果一个点既不是核心点,也不在任何核心点的ε邻域内,它就是噪声点。噪声点不属于任何簇。

  4. ε邻域(Epsilon Neighborhood)

    • 给定一个点P和一个距离阈值ε,ε邻域指的是距离点P小于或等于ε的所有点组成的区域。

  5. MinPts(最小邻域点数)

    • MinPts是指一个点被认为是核心点所需的最小邻域点数。通常MinPts设置为数据维度的2倍或更大。

DBSCAN的工作原理

DBSCAN的聚类过程是通过以下几个步骤实现的:

  1. 选择一个未访问的点:从数据集中选择一个未被访问的点。

  2. 检查该点的ε邻域

    :计算该点的ε邻域内包含的点的数量。

    • 如果邻域内的点数大于或等于MinPts,该点是核心点,算法开始扩展一个簇。所有位于该点的ε邻域内的点都将被加入到簇中。

    • 如果邻域内的点数小于MinPts,则该点是噪声点,暂时标记为噪声。

  3. 扩展簇:对于核心点的邻域内的每个点,重复上述步骤。如果邻域内的某个点是核心点,则继续扩展簇。

  4. 继续此过程,直到所有点都被访问过

DBSCAN的数学公式原理

DBSCAN的公式与计算距离、邻域和密度等概念紧密相关,关键公式如下:

DBSCAN的优缺点

优点:

  1. 能够发现任意形状的簇:不像K-means假设簇是圆形的,DBSCAN可以处理任意形状的簇。

  2. 自动识别噪声点:DBSCAN可以自动将噪声点标记出来,而不需要额外的操作。

  3. 不需要预设簇的数量:与K-means不同,DBSCAN不需要用户预设簇的数量。

缺点:

  1. 对参数敏感:DBSCAN依赖于εMinPts的选择,尤其是ε的值,这可能影响聚类效果。

  2. 无法处理密度差异大的簇:如果数据集包含不同密度的簇,DBSCAN可能会失败。

  3. 高维数据的效果较差:在高维数据中,DBSCAN可能会因为稀疏性问题导致聚类结果不佳。

API介绍

sklearn 中,DBSCAN 的实现类是 sklearn.cluster.DBSCAN ,构造方法通常如下:

sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric='euclidean', algorithm='auto', leaf_size=30, p=None, n_jobs=None)

核心参数介绍:

  1. eps (default=0.5) eps 表示核心点邻域的最大半径。即,两个点的欧几里得距离如果小于 eps,则认为它们是邻居。这个值决定了如何定义“密集区域”。eps 越大,聚类结果越稀疏。

  2. min_samples (default=5) min_samples 表示一个核心点的最小邻居数。若一个点的邻域中有 min_samples 个及以上点,它就会被认为是核心点。通常来说,min_samples 应该设置为比数据维度更大的值,例如 4 或 5。

  3. metric (default='euclidean') 这个参数定义了计算距离的方式,'euclidean' 是最常用的距离度量方式。你可以选择其他距离度量,例如 'manhattan''cosine' 等。

  4. algorithm (default='auto') algorithm 用来指定在聚类过程中使用的算法。常见的有以下几种:

    • 'auto': 自动选择最合适的算法。

    • 'ball_tree': 使用球树算法,适合高维空间。

    • 'kd_tree': 使用k-d树算法,适合低维空间。

    • 'brute': 进行暴力搜索,计算所有点的距离,适合小规模数据。

  5. leaf_size (default=30) leaf_size 仅在 algorithm='ball_tree'kd_tree' 时有效。它影响构建树的数据结构的大小,较小的值可能会提高精度,但计算量较大;较大的值则可能提高效率。

  6. p (default=None) 仅在 metric='minkowski' 时有效。p 是 Minkowski 距离的一个参数。当 p=1 时,表示曼哈顿距离;当 p=2 时,表示欧几里得距离。

  7. n_jobs (default=None) n_jobs 表示使用多少个CPU核心进行并行计算。None 表示不进行并行计算,-1 表示使用所有CPU核心。

具体示例
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# 生成生成高斯分布示例数据集
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 使用DBSCAN进行聚类
db = DBSCAN(eps=0.5, min_samples=5)
y_db = db.fit_predict(X)
# 可视化结果
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y_db, cmap='Paired', marker='o')
plt.title('DBSCAN 聚类结果')
plt.show()

解释:

  • make_blobs函数生成了一个包含4个簇的数据集。

  • DBSCAN(eps=0.5, min_samples=5):设置ε=0.5(邻域半径)和MinPts=5(每个核心点的最小邻域点数)。

  • fit_predict(X):应用DBSCAN聚类算法,并返回每个点的聚类标签。噪声点会被标记为-1

  • 可视化图显示了聚类结果,簇的点会有不同的颜色,噪声点会显示为孤立点。

运行截图:

http://www.dtcms.com/a/414744.html

相关文章:

  • PyTorch 实战:CIFAR-10 图像分类与网络优化
  • STM32H743-ARM例程10-WWDG
  • STM32H743-ARM例程9-IWDG看门狗
  • 什么是 mmdet3d
  • 建设银行嘉兴分行网站首页胶州网站建设dch100
  • Metal - 9. 深入剖析 3D 场景
  • 3DVG的当前面临的挑战和问题
  • 无代码企业网站开发网站建设管理和维护
  • 【C++】string类的常见接口的使用
  • 网站建设制作设计营销公司杭州亚马逊雨林探险作文
  • 东莞圆心科技网站开发哪里有做网站系统
  • 网站定位要点 有哪些方面大航母网站建设费用
  • iServer 启动端口冲突
  • 大连网站建设佳熙科技湖南专业seo优化公司
  • 单词配对记忆游戏小程序V1.1.0-“太空霓虹“视觉升级版
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘onnxruntime’ 问题
  • 设备租赁结算软件有哪些
  • 全网首先 Docker Compose 启动Postgresql18
  • 公司网站非响应式模板网站建设包括内容
  • 180课时吃透Go语言游戏后端开发5:Go语言中的条件语句
  • 企业信息化建设总体规划设计方案
  • 淮北做网站的公司网站建设荣茂
  • Redis 核心知识体系总结
  • 网站图片速度临沂市经济开发区建设局网站
  • React第四天——hooks
  • 地方网站如何做网页版梦幻西游好玩吗
  • 无人机,无人车等机器人系统分布式集群技术难点
  • 企业网站硬件方面建设如何做移动端网站
  • 【代码随想录day 28】 力扣 1005. K次取反后最大化的数组和
  • Python 2025:云原生与容器化技术的新浪潮