基于密度的聚类算法DBSCAN详解!

公众号:尤而小屋
编辑:Peter
作者:Peter

大家好,我是Peter~

今天给大家介绍基于密度的聚类算法DBSCAN,包含:

  • DBSCAN算法定义
  • sklearn.cluster.DBSCAN参数详解
  • DBSCAN聚类实战
  • DBSCAN聚类效果评估
  • DBSCAN聚类可视化
  • DBSCAN算法优缺点总结

不同的聚类算法效果对比

https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html#sphx-glr-auto-examples-cluster-plot-cluster-comparison-py

1 DBSCAN定义

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基于密度的带有噪声的空间聚类应用)是一种基于密度的聚类算法。

密度聚类算法一般假定类别是可以通过样本分布的紧密程度来决定。同一个类别中,样本之间是紧密相连的,也就说通过将紧密相连的样本划分为一类,这样就生成了一个聚类类别。

关于DBSCAN到底是如何实现聚类的?

一个关键点:DBSCAN是基于一组邻域来描述样本集的紧密程度,参数 ( ϵ , M i n P t s ) (\epsilon,MinPts) (ϵ,MinPts)用来描述邻域的样本紧密程度。其中 ϵ \epsilon ϵ描述邻域半径,表示两个样本被视为相邻的最大距离;MinPts表示某一样本的距离为 ϵ \epsilon ϵ的邻域中样本个数的阈值。

DBSCAN的全称是Density-Based Spatial Clustering of Applications with Noise,中文意为“基于密度的带有噪声的空间聚类应用”。它能够通过样本点的密集区域识别出各个聚类簇,并且对噪声点具有很强的鲁棒性。以下是关于DBSCAN的相关介绍:

  1. 核心思想:DBSCAN的核心在于基于样本点的密度进行聚类,即通过找出样本空间中密集的区域来进行簇的划分。
  2. 算法参数:DBSCAN需要两个主要参数:邻域半径和最少点数目。只有当某点在其邻域内的点数大于或等于最少点数目时,该点才被视为核心点。
  3. 点类别:DBSCAN中的点分为三类:核心点、边界点和噪声点。核心点是指那些在邻域内具有足够多的点的对象,边界点则是那些邻近核心点但自身不是核心点的点,而噪声点则既不是核心点也不是边界点
  4. 点关系:DBSCAN中的点关系包括密度直达、密度可达和密度相连。这些关系定义了如何从一个核心点扩展至整个簇。

更多详细的定义请见:参考资料2

2 sklearn用法

2.1 参数

sklearn.cluster.DBSCAN的完整参数解释-参考资料1:

sklearn.cluster.DBSCAN(
    eps=0.5,  # 邻域半径;它表示两个样本被视为相邻的最大距离。较大的值会导致更多的簇,较小的值会导致更少的簇
    *,
    min_samples=5,  # 形成簇所需的最小样本数
    
    # euclidean-欧式距离;manhattan-曼哈顿距离;chebyshev-切比雪夫距离;minkowski-闵可夫斯基距离;
    # wminkowski-带权重闵可夫斯基距离;seuclidean-标准化欧式距离;mahalanobis-马氏距离
    metric='euclidean',  # 计算样本之间距离的度量方法;
    metric_params=None,  # 度量方法的其他参数
    algorithm='auto', # 用于计算最近邻的算法,默认'auto', ['auto'、'ball_tree'、'kd_tree'和'brute']
    leaf_size=30,  # 构建最近邻树时的叶子大小
    p=None,  # Minkowski距离的幂指数,默认值为None。当度量方法为'minkowski'时,该参数有效
    n_jobs=None,  # 并行计算的线程数,默认为None;若为-1,则使用所有可用的处理器
)

其中最主要的参数eps(对应 ϵ \epsilon ϵ)和Min_samples(对应 M i n P t s MinPts MinPts

2.2 属性

  • core_sample_indices:核心店的index
  • components:核心点的原始数据信息
  • lables:每个样本的类别label,noise的label是-1

3 案例1

3.1 模拟数据

In [1]:

import numpy as np
import matplotlib.pyplot as plt

from sklearn.cluster import DBSCAN
from sklearn import metrics  # 评估指标

import warnings
warnings.filterwarnings("ignore")

In [2]:

X = np.array([[1, 2], 
              [2, 2], 
              [2, 3],
              [3, 5],
              [9, 7], 
              [8, 9], 
              [45, 
### VSCode Vue3 开发常用插件推荐 #### 编辑增强类插件 为了提高编辑效率,一些插件提供了诸如自动补全、语法高亮等功能。例如 `Auto Rename Tag` 插件能够在修改HTML/XML标签时同步更新其闭合标签[^2]。 #### 主题与界面优化 对于视觉体验有需求的开发者来说,可以选择像 `Atom One Light Theme` 或者 `Cobalt2 Theme Official` 这样的主题来美化工作环境[^1]。另外还有 `VSCode Great Icons` 提供更美观的图标支持[^1]。 #### 中文语言包 为了让国内用户更好地理解和操作VSCode,安装 `Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code` 是很有必要的,它能够使整个IDE界面汉化。 #### 代码片段加速开发 `Vue VSCode Snippets` 和 `Vue 3 Snippets` 都是非常实用的选择,前者通过预设好的模板让开发者可以迅速构建起基本结构;后者则专注于为最新版本框架定制专属片段集合[^3]。 #### 导航辅助工具 当项目规模逐渐增大之后,利用 `Vue Peek` 实现快速定位组件定义位置变得尤为重要。该功能允许使用者仅需简单点击就能直达目标源码所在之处。 #### 路径处理解决方案 针对模块间相互引用频繁的情况,`Path Intellisense` 的存在无疑大大简化了这一过程——无论是相对还是绝对路径都能得到智能提示。而 `file-jump` 功能同样实现了别名路径下的便捷跳转[^4]。 #### 类型感知能力加强 考虑到TypeScript日益普及的趋势,在编写基于TSX/JSX语法糖封装后的单文件组件(SFCs)时,借助于 `TypeScript Vue Plugin (Volar)` 及 `Vue Language Features (Volar)` 来获得更好的类型推断效果显得尤为关键。 #### 图片资源管理 如果涉及到大量图像素材,则不可错过 `Image preview` ,它可以即时显示图片内容而不必离开当前窗口去寻找原图。 #### 版本控制集成 最后但并非最不重要的是,保持良好的Git实践习惯始终是软件工程领域内不可或缺的一环。因此建议加入 `SVN` 或其他形式的SCM客户端以便随时追踪变更记录并协同作业。 ```json { "editor.codeActionsOnSave": { "source.fixAll.eslint": true, "source.organizeImports": true }, "[vue]": { "editor.defaultFormatter": "Vue.vscode-vue-languageservice" } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值