news 2026/4/17 23:41:12

这个DBSCAN案例实现得挺有意思。咱们直接上代码,边看边聊。首先得准备点测试数据,用三维正态分布随机数生成三个簇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
这个DBSCAN案例实现得挺有意思。咱们直接上代码,边看边聊。首先得准备点测试数据,用三维正态分布随机数生成三个簇

DBSCAN聚类(Density-Based Spatial Clustering of Application with Noise) 设定距离阈值、最小相邻观测数进行聚类,得到每个数据的聚类结果,无聚类中心 案例提供了非常详细的备注,智能化出2维3维聚类图,自动根据聚类结果添加相应多种类的颜色 Matlab代码,备注详细,替换自己数据即可 温馨提示:联系请考虑是否需要,(Example_61)

% 生成三簇三维数据(可替换为自己的数据矩阵) mu = [1 2 3; 4 5 6; 7 8 9]; % 各维度均值 sigma = cat(3,[1 1 1],[0.5 0.5 0.5],[2 2 2]); % 协方差矩阵 data = [mvnrnd(mu(1,:),sigma(:,:,1),200); mvnrnd(mu(2,:),sigma(:,:,2),150); mvnrnd(mu(3,:),sigma(:,:,3),100)];

生成的点云在空间里呈现不同密度分布,第三簇故意把协方差调大,让数据更分散。接下来是核心的DBSCAN函数:

function [IDX, isNoise] = DBSCAN(data, epsilon, minPts) [m,n] = size(data); visited = false(m,1); IDX = zeros(m,1); cluster = 1; for i = 1:m if ~visited(i) visited(i) = true; neighbors = regionQuery(data,i,epsilon); if numel(neighbors) < minPts IDX(i) = -1; % 标记为噪声 isNoise(i) = true; else expandCluster(i,neighbors,cluster,epsilon,minPts); cluster = cluster + 1; end end end % 子函数处理区域查询 function neighbors = regionQuery(~,pointIdx,eps) distances = sqrt(sum((data - data(pointIdx,:)).^2,2)); neighbors = find(distances <= eps); end end

这个实现有几个亮点:1)用regionQuery子函数封装距离计算,方便维护;2)通过visited数组避免重复访问;3)噪声点直接标记为-1。不过要注意,原数据量大的时候计算欧氏距离可能会慢,可以考虑预先计算距离矩阵。

可视化部分做得挺智能,自动判断维度生成对应图形:

% 动态生成颜色映射(支持任意数量簇) colors = hsv(max(IDX)); colors = [colors; 0.7 0.7 0.7]; % 噪声点用灰色 if size(data,2) == 2 scatter(data(:,1), data(:,2), 36, colors(IDX,:), 'filled'); else scatter3(data(:,1),data(:,2),data(:,3), 40, colors(IDX,:), 'filled'); end

这里用hsv色相环自动生成鲜艳颜色,再用灰度表示噪声。三维可视化用scatter3直接处理,颜色映射逻辑和二维保持一致。试跑结果可以看到三个主簇和边缘的噪声点,第三簇因为初始设置协方差较大,边界区域有些点可能被识别为噪声。

实际使用时替换数据矩阵就行,建议先做标准化处理:

data = zscore(your_data); % 消除量纲影响 epsilon = 0.5; % 根据数据分布调整 minPts = 10; % 密度阈值

遇到过参数调优的问题?可以试试这个技巧:画出k-距离曲线(取第minPts近邻的距离排序),拐点位置通常是比较合适的epsilon值。这个案例没实现但值得补充,能帮助新手快速确定参数范围。

最后输出结果中,簇标签从1开始连续编号,-1表示噪声。处理高维数据时虽然只能显示三维投影,但聚类标签本身保留着完整信息,可以导出做进一步分析。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 10:50:57

66-计及调峰主动性的风光水火储多能系统分层优化调度策略

66-计及调峰主动性的风光水火储多能系统互补协调优化调度 摘要&#xff1a;代码主要实现了一种风光水火储多能系统互补协调优化调度策略。 考虑多能系统电源结构复杂&#xff0c; 涉及变量及约束条件较多&#xff0c; 因此采用分层优化调度方案。 上层模型以净负荷波动最小和储…

作者头像 李华
网站建设 2026/4/5 6:25:17

如何通过数据分析实现精准市场营销

如何通过数据分析实现精准市场营销 关键词:数据分析、精准市场营销、客户细分、营销预测、数据挖掘 摘要:本文旨在探讨如何利用数据分析来实现精准市场营销。首先介绍了数据分析在精准营销中的背景和重要性,接着阐述了相关核心概念及其联系,详细讲解了核心算法原理和具体操…

作者头像 李华
网站建设 2026/4/16 20:54:50

Java是当今最优雅的开发语言

我认为Java是当今最优雅的开发语言&#xff01;天然成熟的生态 &#xff01;&#xff01;项目内部代码都各种积木化(模块化) (离不开spring boot的加持)我也曾用过Delphi ,C#,Python 开发 &#xff01;随感而发&#xff0c;不喜勿喷#嵌入式 #电子信息 #编程 #软件设计与开发 #找…

作者头像 李华
网站建设 2026/4/16 19:02:39

2026年最值得学习的十大 SAP 开发技术

笔者之前曾经转发过另一位技术博主的文章:被 SAP 弃用的十大开发技术盘点。 在这辞旧迎新之际,我想和大家聊聊我心中的2026年我仍然愿意持续投入时间去学习的一些 SAP 开发技术。 因为笔者水平和视野局限,加上这份清单有笔者主观兴趣爱好在内,可能大家对清单上罗列的技术…

作者头像 李华
网站建设 2026/4/15 20:01:25

Nodejs-HardCore: 模块管理与I/O操作详解

模块管理1 ) 安装与加载模块 // 通过require加载内置模块 const fs require(fs);// 加载第三方模块&#xff08;需先安装&#xff09; // npm install lodash const _ require(lodash);// 加载本地模块 const myModule require(./myModule);关键点&#xff1a; Node.js 使用…

作者头像 李华
网站建设 2026/4/17 18:52:44

JSP Session管理详解

JSP Session管理详解 引言 在JavaServer Pages(JSP)技术中,Session是服务器端用于存储特定用户会话所需属性及配置信息的类。Session可以看作是Web应用中的一种存储机制,用于跟踪用户的会话状态。本文将详细介绍JSP Session的概念、生命周期、创建、配置以及如何使用它。…

作者头像 李华