《机器学习》——DBSCAN算法

devtools/2025/1/16 8:09:34/

文章目录

  • DBSCAN算法简介
  • DBSCAN算法原理
    • 核心概念
    • 聚类过程
  • DBSCAN模型
    • 模型API
    • 主要参数
    • 其他参数
  • DBSCAN算法实例
    • 实例步骤
      • 导入所需库
      • 导入数据文件
      • 传入变量
      • DBSCAN聚类分析
      • 添加数据进原数据框
      • 对聚类结果进行评分

DBSCAN算法简介

  • DBSCAN(Density - Based Spatial Clustering of Applications with Noise)是一种无监督的、基于密度的空间聚类算法,在数据挖掘和机器学习领域应用广泛。

DBSCAN算法原理

核心概念

在这里插入图片描述

聚类过程

在这里插入图片描述
在这里插入图片描述

DBSCAN模型

模型API

在这里插入图片描述

主要参数

  • eps(epsilon):
    • 定义了邻域的半径。对于一个数据点,其邻域是以该点为中心,以 eps 为半径的超球体。该参数决定了数据点之间的密度度量范围。
    • 示例:如果将 eps 设置为 0.5,那么对于每个数据点,算法会考虑在距离该点 0.5 以内的其他点作为其邻域内的点。
    • 选择该参数时,需要根据数据的分布和规模来确定。如果数据点分布较为稀疏,eps 可能需要设置得较大;如果数据点分布密集,较小的 eps 可能更合适。
  • min_samples(MinPts):
    • 表示在一个数据点的 eps 邻域内所需的最小数据点数,以将该点视为核心点。
    • 例如,将 min_samples 设置为 5,意味着如果一个点的 eps 邻域内包含的点(包括自身)少于 5 个,它就不能成为核心点。
    • 一般来说,该参数需要根据数据集的规模和噪声情况来调整。在噪声较多的数据集中,可以适当提高 min_samples 以减少噪声对聚类的影响;对于小型数据集,可能需要降低该值以避免将过多的点标记为噪声。

其他参数

  • metric:
    • 用于计算数据点之间距离的度量标准。常见的度量标准包括欧几里得距离(euclidean)、曼哈顿距离(manhattan)、余弦距离(cosine)等。
    • 示例:如果数据点表示文本的特征向量,使用余弦距离可能更合适,因为它考虑了向量的方向,而不是仅考虑欧几里得距离的大小,这样更能反映文本之间的相似性;对于普通的数值数据,欧几里得距离可能是一个不错的选择。
    • 选择合适的度量标准可以根据数据的特点和任务需求,不同的度量会导致不同的距离计算结果,进而影响聚类结果。
  • algorithm:
    • 用于计算最近邻的算法,不同的算法在性能和适用场景上有所不同。
    • 例如,可选项可能包括 auto(根据数据集自动选择)、ball_tree(使用球树算法)、kd_tree(使用 k - d 树算法)、brute_force(暴力计算,适用于小型数据集)等。
    • 在选择算法时,对于低维数据和小型数据集,brute_force 可能足够快;对于高维数据,ball_tree 或 kd_tree 可能更高效,因为它们利用了数据的结构来加速最近邻搜索。

DBSCAN算法实例

对以下数据进行聚类处理
在这里插入图片描述
数据文件:通过网盘分享的文件:data.txt
链接: https://pan.baidu.com/s/19i7j4OttyWRkX13a7TXbRQ 提取码: hm1t
–来自百度网盘超级会员v2的分享

实例步骤

  • 导入所需库
  • 导入数据文件
  • 传入变量
  • DBSCAN聚类分析
  • 添加结果进入原数据框
  • 对聚类结果进行评分

导入所需库

import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn import metrics

所需库可自行下载

导入数据文件

#读取文件
beer = pd.read_table('data.txt',sep=' ',encoding='utf-8',engine='python')

传入变量

#传入变量(列名)
x = beer[["calories","sodium","alcohol","cost"]]

DBSCAN聚类分析

#DBSCAN聚类分析
"""
eps:半径
min samples:最小密度【就是圆内最少有几个样本点】
Labels:分类结果【自动分类,-1为离群点】
"""
db = DBSCAN(eps=20,min_samples=2).fit(x)
labels= db.labels_

添加数据进原数据框

#添加结果至原数据框
beer['cluster_db']=labels
beer.sort_values('cluster_db')

对聚类结果进行评分

#对聚类结果进行评分"""
metrics.silhouette_score轮廓评价函数,它是聚类模型优劣的一种评估方式,可用于对聚类结果进
X:数据集scaled_cluster:聚类结果
score:非标准化聚类结果的轮系数->聚类
"""
score = metrics.silhouette_score(x,beer.cluster_db)
print(score)

结果:
在这里插入图片描述


http://www.ppmy.cn/devtools/150888.html

相关文章

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用,凭借uniapp 可以在h5 小程序 app…

Leetcode 967 Numbers With Same Consecutive Differences

题意 给定n,代表整数的长度,给定k代表两个相邻数字之间的间隔。求所有的值构成的组合 题目链接 https://leetcode.com/problems/numbers-with-same-consecutive-differences/description/ 题解 dfs,有k位置要选,第一个位置我…

【C++】揭秘类与对象的内在机制(核心卷之构造函数与析构函数的奥秘)

文章目录 一、类的默认成员函数二、构造函数1. 默认生成的构造函数能干什么?2. 怎么写构造函数 三、析构函数1. 默认生成的析构函数能干什么?2. 怎么写析构函数 一、类的默认成员函数 默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成…

【I/O编程】UNIX文件基础

IO编程的本质是通过 API 操作 文件。 什么是 IO I - Input 输入O - Output 输出 这里的输入和输出都是站在应用(运行中的程序)的角度。外部特指文件。 这里的文件是泛指,并不是只表示存在存盘中的常规文件。还有设备、套接字、管道、链接…

比较之舞,优雅演绎排序算法的智美篇章

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、冒泡排序:数据海…

对受控组件和非受控组件的理解?应用场景?

受控组件与非受控组件的理解与应用 在 React 中,组件可以通过两种方式管理表单元素的状态:受控组件和非受控组件。这两者在处理表单输入数据时有很大的区别,理解它们的应用场景和优劣对于开发者来说非常重要。 目录结构: 受控组…

qt-C++笔记之自定义继承类初始化时涉及到parents的初始化

qt-C笔记之自定义继承类初始化时涉及到parents的初始化 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget …

Linux入门——权限

shell命令以及运行原理 Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel…