DBSCAN
一、直观理解:从“人够多的地方”向外蔓延,冷清处当噪声
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)不预设球状中心,而看局部密度:
- 若某点的 -邻域内至少有
MinPts个点,它是核心点; - 从核心点出发,把密度可达的点连成一片,形成一个簇;
- 谁也不挨着密集区的点标为噪声。
像城市灯火:灯火通明的街区连成城区,零星灯火是郊外噪声。因此它能发现任意形状簇,并自带异常点识别。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 任意形状簇;存在噪声/离群;簇密度大致相近;不需预先指定簇数。 |
| 核心优点 | 自动决定簇数;识别噪声;非凸友好;参数语义直观。 |
| 局限与缺点 | 与 MinPts 敏感;密度差异大的簇难同时照顾;高维距离退化;边界点归属可能不稳定。 |
三、核心原理
参数:半径 ,密度阈值 MinPts。
- 标记核心点: ;
- 若 且 核心,则 由 直接密度可达;
- 核心点链上传达得到密度可达,互相可达的核心点及其边界点构成一簇;
- 非任何簇成员 → 噪声(标签常为 0 或 -1)。
时间复杂度用索引可达 ,朴素 。
与 K-means 不同:无中心、无 、有噪声类。
四、关键决策
| 决策点 | 建议 |
|---|---|
| MinPts | 常用 ~( 维数)或 4–10 |
| -距离图拐点() | |
| 标准化 | 强烈建议 |
| 密度不均 | 考虑 OPTICS 或分层 DBSCAN |
| 高维 | 先降维或换度量/算法 |
五、MATLAB 示例
rng(6);
% 圆环 + 团 + 噪声
theta = linspace(0, 2*pi, 120)';
ring = [cos(theta), sin(theta)] + 0.05*randn(120,2);
blob = 0.3*randn(40,2) + [0 0];
noise = 2.5*randn(25,2);
X = [ring; blob; noise];
Xz = zscore(X);
% k-距离图帮助选 epsilon
MinPts = 5;
D = pdist2(Xz, Xz);
D = sort(D, 2, "ascend");
kDist = sort(D(:, MinPts), "descend");
figure; plot(kDist); xlabel("点(按k距离降序)"); ylabel("k-距离");
title("选 epsilon 的拐点");
epsilon = 0.35; % 按图调整
idx = dbscan(Xz, epsilon, MinPts);
figure; gscatter(Xz(:,1), Xz(:,2), idx);
title(sprintf("DBSCAN \\epsilon=%.2f, MinPts=%d", epsilon, MinPts));
fprintf("簇数(不含噪声)= %d, 噪声点=%d\n", ...
numel(unique(idx(idx>0))), sum(idx<0 | idx==0));
% 参数敏感性小网格
epsList = [0.2 0.3 0.4 0.5];
for e = epsList
id = dbscan(Xz, e, MinPts);
nCl = numel(unique(id(id>0)));
nNoise = sum(id<=0);
fprintf("eps=%.2f -> 簇=%d, 噪声=%d\n", e, nCl, nNoise);
end
六、如何解释结果
- 的选取依据(k-距离图);
- 簇形状与噪声比例是否合理;
- 业务含义:噪声是异常交易还是测量错误;
- 稳定性: 微扰下簇是否保持;
- 报告:参数、簇规模、噪声率、二维可视化。
七、常见误区
1. 不看 k-距离就拍
差一个数量级结果天壤之别。
2. 密度差一个数量级的两簇强求同一
小密簇变噪声或大稀簇被拆碎。
3. 高维直接欧氏 DBSCAN
邻域概念崩溃,先降维。
4. 把噪声全删再报“完美分群”
应分析噪声来源。
5. 与有监督准确率混谈
无标签时用内部稳定性与业务剖面。
附:建模论文中的写法要点
- 问题对应:用一两句话说明为何该方法匹配题目数据结构与目标(分类/分群/排序/效率)。
- 符号与步骤:按“输入 → 预处理 → 核心计算 → 输出指标”列出编号步骤,公式与代码变量名一致。
- 参数表:列出全部可调参数、取值、选取依据(CV、信息准则、业务约束或灵敏度)。
- 结果呈现:主结果用表格;辅以 1–2 张图(边界、树状图、得分条形图、效率分解等)。
- 稳健性:至少做一种扰动——删点、换权重、换距离、换初值或换阈值,观察结论是否保持。
- 局限:主动写明假设(球状簇、线性可分、CRS、完全补偿等)及适用边界,避免被质询时被动。
若主方法结论与合理基线(如 K-means 对 GMM、加权和对 TOPSIS、CCR 对 BCC)严重冲突,应回到数据质量与指标方向检查,而不是只报告“更好看”的一种结果。
附:计算检查清单
在提交结果前,建议按下列清单快速自检:
- 输入矩阵:行/列含义是否与正文一致,有无缺失、重复行、单位混用。
- 方向与尺度:极小型是否已正向化;聚类/距离类是否已标准化;评价类权重是否归一。
- 参数来源:所有阈值、簇数、核宽、理想解定义能否在正文找到依据。
- 数值稳定:协方差/相关是否接近奇异;DEA 线性规划是否全部求解成功;对数/除零是否加保护。
- 随机性:涉及随机初值的算法是否固定种子并报告多次结果的稳定性。
- 验证协议:分类任务是否严格隔离测试集;重采样/SMOTE 是否仅用于训练折。
- 图表编号:主结论表与图在正文中被引用,而不是只放附录。
- 可复现:给出软件版本(如 MATLAB R20xx)与关键函数名,使读者能重跑最小示例。
不满足清单中任一项时,优先修正流程,再讨论“方法先进性”。对综合评价题,额外检查:更换一种合理权重后,前三名是否大体稳定;若剧烈跳动,应降低对精细名次的措辞强度。
八、小结
DBSCAN 以核心点的密度可达定义任意形状簇,并把低密度点标为噪声,是空间与异常并存场景的首选之一。
调参焦点是 + MinPts;密度多尺度时转向 OPTICS。
补充说明:方法细节以正文公式与 MATLAB 示例为准;若工具箱函数名随版本变化,可用本文手写实现对照复现核心步骤。