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

【机器学习】DBSCAN聚类算法——原理、参数调优与实战

DBSCAN聚类算法:从原理到参数调优实战

  • 简介
  • 一、DBSCAN 相关概念
    • 核心概念图解
    • 核心术语详解
    • 算法实现流程
  • 二、DBSCAN 的 API
    • 核心参数说明
  • 三、案例分析
    • 1. 导入所需库
    • 2. 数据读取与标准化
    • 3. 数据准备
    • 4. DBSCAN 参数调优
    • 5. 确定最佳参数并输出结果
  • 总结
    • 关键参数调优建议

简介

本次我们将聚焦于一款极具特色的聚类算法——DBSCAN。相较于 K-means 等需要预先指定簇数量的算法,DBSCAN 以其"无监督自适应"的特性,在聚类领域占据着不可替代的地位。

在这一课中,我们会深入剖析 DBSCAN 算法的核心原理。你将了解到它如何通过"密度可达"和"核心对象"等关键概念,自动发现数据集中任意形状的簇,还能识别出那些不属于任何簇的噪声点。这一特性让它在处理非凸形状、存在噪声的数据时,展现出远超传统聚类算法的优势。

一、DBSCAN 相关概念

核心概念图解

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的空间聚类算法。它将簇定义为密度相连的点的最大集合,能够将具有足够高密度的区域划分为簇,并在噪声数据中发现任意形状的聚类。

核心术语详解

术语定义
核心对象(Core Point)如果某个点的 Eps 邻域内包含的样本数量 ≥ MinPts,则该点为核心对象
Eps 邻域给定对象半径 Eps 内的区域,即以该点为中心、Eps 为半径的圆形区域
直接密度可达如果点 p 在点 q 的 Eps 邻域内,且 q 是核心对象,则称 p 从 q 直接密度可达
密度可达存在一个点链 p₁, p₂, …, pₙ,使得每个点都从上一个点直接密度可达
边界点(Border Point)在某个簇内,但自身不是核心对象的点
离群点(Outlier / Noise)既不是核心对象也不是边界点,不属于任何簇的点

算法实现流程

  1. 输入数据集
  2. 指定半径 Eps
  3. 指定密度阈值 MinPts
  4. 遍历所有点,标记核心对象
  5. 对每个核心对象,找出其密度可达的所有点,形成簇
  6. 将不在任何簇中的点标记为噪声

二、DBSCAN 的 API

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

核心参数说明

参数说明
eps邻域半径,决定了一个点的邻域范围,默认 0.5
min_samples构成核心点所需的最少样本数(密度阈值),默认 5
metric距离度量方式,默认 ‘euclidean’(欧氏距离)
metric_params度量函数的额外参数,默认 None
algorithm近邻搜索算法,‘auto’ 表示自动选择(ball_tree / kd_tree / brute)
leaf_size构建 BallTree 或 KDTree 时的叶子节点大小,默认 30
p闵可夫斯基距离的阶数(p=2 为欧氏距离,p=1 为曼哈顿距离)
n_jobs并行计算的 CPU 核心数,-1 表示使用所有核心

三、案例分析

1. 导入所需库

importpandasaspdfromsklearn.clusterimportDBSCANfromsklearn.preprocessingimportStandardScalerfromsklearn.metricsimportadjusted_rand_score,normalized_mutual_info_scoreimportnumpyasnp

2. 数据读取与标准化

# 读取训练集和测试集数据data_train=pd.read_csv("datingTestSet2.txt",sep='\t',encoding='utf-8',engine='python',header=None)data_test=pd.read_csv("datingTestSet1.txt",sep='\t',encoding='utf-8',engine='python',header=None)# 标准化处理(DBSCAN 基于距离,必须进行标准化)scaler=StandardScaler()data_train.iloc[:,:-1]=scaler.fit_transform(data_train.iloc[:,:-1])data_test.iloc[:,:-1]=scaler.transform(data_test.iloc[:,:-1])

3. 数据准备

x_train=data_train.iloc[:,:-1]# 训练集特征x_test=data_test.iloc[:,:-1]# 测试集特征y_train_true=data_train.iloc[:,-1]# 训练集真实标签y_test_true=data_test.iloc[:,-1]# 测试集真实标签

4. DBSCAN 参数调优

# 测试不同的 eps 参数scores=[]eps_param_range=[0.09,0.1,0.2,0.3,0.4,0.5,0.6]forepsineps_param_range:dbscan=DBSCAN(eps=eps,min_samples=2)train_labels=dbscan.fit_predict(x_train)# 忽略噪声点(标签为 -1)进行评估mask=train_labels!=-1ifnp.sum(mask)>0:ari=adjusted_rand_score(y_train_true[mask],train_labels[mask])nmi=normalized_mutual_info_score(y_train_true[mask],train_labels[mask])score_mean=(ari+nmi)/2scores.append(score_mean)print(f"eps ={eps},平均得分 (ARI+NMI)/2 ={score_mean:.4f}")else:print(f"eps ={eps},所有样本均被标记为噪声")scores.append(-1)

5. 确定最佳参数并输出结果

# 选择最佳 epsbest_eps=eps_param_range[np.argmax(scores)]print(f"最优 eps 参数:{best_eps}")# 使用最佳参数重新训练best_dbscan=DBSCAN(eps=best_eps,min_samples=2)train_labels=best_dbscan.fit_predict(x_train)print("训练集聚类标签:\n",train_labels)# 对测试集进行聚类test_labels=best_dbscan.fit_predict(x_test)print("测试集聚类标签:\n",test_labels)

总结

DBSCAN 的优势
无需预先指定簇数量:自动发现数据中的聚类结构

可发现任意形状的簇:不同于 K-means 只能发现球形簇

具有噪声过滤能力:能自动识别并剔除离群点

关键参数调优建议

参数调优方法
eps使用 k-distance 图辅助确定;或通过网格搜索结合评估指标选择
min_samples一般取数据维度的 2 倍或更大;数据量较大时可适当增加

http://www.jsqmd.com/news/1317338/

相关文章:

  • 2026 年现阶段,皮山靠谱的风管机安装施工公司联系方式,花3000装它,却让全屋电费涨了两倍?多数人踩的坑你得避开-博力久能暖通 - 实业推荐官【官方】
  • 别再暴力切分了!大模型 RAG 中跨页大表格的智能语义切分方案
  • MateClaw 2.0 正式发布:从“一个能干活的人”到“一支能协作的队伍”
  • 电赛电源驱动电路设计:从晶体管到H桥的实战指南
  • 工业制动电阻选型全攻略:从原理到实战,避免过压烧毁
  • 2026 年 7 月新发布:南沙群岛知名的观赏波兰鸡厂商找哪家,你见过把“天鹅颈”安在鸡身上的小家伙吗?看它时千万别眨眼 - 行业严选官
  • 道德经道影书斋注释版 044
  • 从马里奥银币项目学习2D平台游戏开发:核心机制与Godot实践
  • 2026赤峰经济纠纷处理实务:民间借贷与合同欠款的证据要点与维权路径 - 本地品牌推荐
  • 多平台投稿发布系统
  • MyBatis-Plus saveBatch异步事务问题分析与解决方案
  • SpringBoot+Vue物流系统开发实战与优化经验
  • CANoe实战:AUTOSAR I-PDU车载以太网仿真与测试全流程
  • 2026 年新发布:贵阳可靠的大型设备吊装厂家怎么联系,这活儿为啥连老司机都不敢随便接?-全星起重装卸 - 行业严选官
  • 2026 年现阶段平泉专业的50*60镀锌凹槽管厂家推荐几家,阳台晾衣杆用这玩意儿,3年没锈还省了千元维修费? - 企业推荐官【认证】
  • 2026 年更新:济宁评价高的轮胎粉碎机生产商格局重塑与选型新思路,收废胎竟能年入百万?这台让行业震动的狠活机器你见过吗? - 企业推荐官【认证官方】
  • 蓝牙Beacon室内定位:从原理到部署的完整实战指南
  • 【无人机配送】基于帕累托遗传蚁群优化(PGA)算法在支持ISAC的CAT-M1物联网传感器网络中的多无人机路径规划 无人机能耗、飞行距离、覆盖范围及资源分配,系统吞吐量最高可达95%附Matlab代码
  • Codex AI模型代理实战:从零配置到IDE集成,解决网络与模型接入难题
  • RF Explorer软件:手持频谱分析仪从入门到实战应用指南
  • STM32-S188-车牌图像识别+二维码+语音播报+车位感应+停车引导+闸道控制+防夹+时钟+入库出库时间+计时计费+OLED屏+按键+(无线方式选择)1(设计源文件+万字报告+讲解)(支持资料、图
  • Timeline‑Studio:基于Agent Skill,实现浏览器端AI智能体全自动剪辑
  • 题解:P16710 愿望
  • 2026 年新发布:滨城比较好的大型工业吊扇厂家哪家权威,车间高温难题竟被这玩意儿轻松破解? - 企业推荐官【认证官方】
  • 2026 年当下,平湖诚信的园林景观方案设计公司推荐,做庭院规划别瞎折腾,这个设计居然能省一半钱还超显档次?-超逸景观工程 - 行业甄选官
  • 2026 年微山专业的双边丝护栏加工供货厂家深度解析,给护栏厂省3成加工费?原来都是从这步抠出来的!-振昂丝网 - 行业推荐【认证官】
  • C++高性能后端赋能微信小程序睡眠健康系统:架构设计与工程实践
  • 13 Redis 数据库与 Spring Boot
  • Windows系统Anaconda安装配置全攻略:从下载到环境管理
  • 2026 年更新:汕头有实力的专业的铝合金地板工厂制造商哪家权威,别再找铝合金地板?这款靠谱的厂货比市面上省近三成预算,关键还抗造-亚豪防静电地板 - 企业官方推荐【认证】