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

结合 DBSCAN 示例代码介绍 DBSCAN

前文为JoyT的科研之旅第一周——科研工具学习及论文阅读收获-CSDN博客

DBSCAN 介绍

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够识别出任意形状的簇,并有效地处理噪声点DBSCAN 不需要事先指定聚类的数量,这是其与许多其他聚类算法(如 K-means)的一个主要区别。 

DBSCAN 基本原理

  1. 核心点:如果一个点的 ϵ 邻域内至少有 min_samples 个点(包括点本身),则此点被认为是一个核心点

  2. 边界点和噪声点:距离核心点不远(在 ϵ 范围内),但自身不满足核心点条件的点被视为边界点。不属于核心点或边界点的点被视为噪声点。

  3. 聚类形成:通过连接在 ϵ 范围内互相可达的核心点,形成聚类。边界点会被归入其所连接的核心点所在的聚类,而噪声点不被归入任何聚类


代码分析

取前文代码的DBSCAN部分进行介绍:

# DBSCAN去噪
epsilon = 0.3  # DBSCAN的半径参数
min_samples = 3  # DBSCAN的最小样本数参数(MinPts)
dbscan = DBSCAN(eps=epsilon, min_samples=min_samples)
clusters = dbscan.fit_predict(np.column_stack((filtered_longitudes, filtered_latitudes)))# 去除噪声点
denoised_longitudes = filtered_longitudes[clusters != -1]
denoised_latitudes = filtered_latitudes[clusters != -1]
denoised_timestamps = filtered_timestamps[clusters != -1]

代码中的 DBSCAN 工作流程

  1. 参数设置(与前文呼应,加入KDC能够使得参数个数为1)

    • epsiloneps): 定义了邻域的半径大小。在这个范围内的点被认为是邻近的。
    • min_samples: 定义了一个点成为核心点所需的最小邻居数目。
  2. DBSCAN 实例化和拟合

    • 创建 DBSCAN 对象,使用上述参数。
    • 该对象调用 fit_predict 方法对数据进行聚类,数据由经纬度构成(filtered_longitudes, filtered_latitudes)。
  3. 噪声点的处理

    • fit_predict 方法返回的 clusters 数组为每个点指定了一个聚类标签。噪声点被标记为 -1
    • 通过检查 clusters != -1 来筛选出非噪声点,即那些属于某个聚类的点。
  4. 结果可视化

    • 在散点图中绘制去噪后的数据。这些点是 DBSCAN 确定为属于某个聚类的点。

结论

在代码中,DBSCAN 被用来识别和移除噪声点,只保留那些被归为某个聚类的点。这种方法特别适合于处理包含噪声和具有不规则形状簇的数据,是一种强大且灵活的聚类工具。

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

相关文章:

  • vscode 调试jlink
  • 微前端实战:打造高效、灵活的前端应用架构
  • csv文件EXCEL默认打开乱码问题
  • C语言之实现贪吃蛇小游戏篇(2)
  • Comparator接口
  • SELinux refpolicy详解(9)
  • 零基础上手,秒识别检测,IDEA研究院发布全新T-Rex模型
  • python每日一题——20旋转图像
  • 云计算生成式 -给你不一样的音乐推荐新体验
  • Zabbix 6.0部署+自定义监控项+自动发现与自动注册+部署zabbix代理服务器
  • Docker 简介及其常用命令详解
  • 基于PHP的高中生物学习平台
  • Git多库多账号本地SSH连接配置方法
  • 爬虫学习-基础(HTTP原理)
  • Gazebo 中为地面和车轮添加摩擦属性
  • 【重点】【滑动窗口】3. 无重复字符的最长子串
  • python初始化矩阵相关
  • C++ :运算符重载
  • 如何跑通跨窗口渲染:multipleWindow3dScene
  • flutter-web中使用js工具类
  • @ResponseBody详解:用于响应体响应数据
  • 【Python百练——第3练】矩形类及操作
  • 【C语言学习疑难杂症】C语言中数组存储时为什么从低地址到高地址
  • Linux:查看端口占用的进程
  • 医美店会员管理系统预约小程序作用是什么
  • Linux 正则表达式
  • C语言面试之数组指针上篇
  • LinkWeChat,唯一以开源为核心的SCRM
  • Android textView 显示: STRING_TOO_LARGE
  • 用HeidiSQL在MySQL中创建新的数据库