跳到主要内容

DBSCAN

一、直观理解:从“人够多的地方”向外蔓延,冷清处当噪声​

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)不预设球状中心,而看局部密度:

  • 若某点的 ε\varepsilon-邻域内至少有 MinPts 个点,它是核心点;
  • 从核心点出发,把密度可达的点连成一片,形成一个簇;
  • 谁也不挨着密集区的点标为噪声。

像城市灯火:灯火通明的街区连成城区,零星灯火是郊外噪声。因此它能发现任意形状簇,并自带异常点识别。

二、适用场景与优缺点​

类型说明
适用场景任意形状簇;存在噪声/离群;簇密度大致相近;不需预先指定簇数。
核心优点自动决定簇数;识别噪声;非凸友好;参数语义直观。
局限与缺点ε\varepsilon 与 MinPts 敏感;密度差异大的簇难同时照顾;高维距离退化;边界点归属可能不稳定。

三、核心原理​

参数:半径 ε\varepsilon,密度阈值 MinPts。

  1. 标记核心点: ∣Nε(x)∣≥MinPts|N_\varepsilon(x)|\ge \mathrm{MinPts};
  2. 若 y∈Nε(x)y\in N_\varepsilon(x) 且 xx 核心,则 yy 由 xx 直接密度可达;
  3. 核心点链上传达得到密度可达,互相可达的核心点及其边界点构成一簇;
  4. 非任何簇成员 → 噪声(标签常为 0 或 -1)。

时间复杂度用索引可达 O(nlog⁡n)O(n\log n),朴素 O(n2)O(n^2)。

与 K-means 不同:无中心、无 KK、有噪声类。

四、关键决策​

决策点建议
MinPts常用 2p2p~2p+12p+1(pp 维数)或 4–10
ε\varepsilonkk-距离图拐点(k=MinPtsk=\mathrm{MinPts})
标准化强烈建议
密度不均考虑 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

六、如何解释结果​

  1. ε\varepsilon 的选取依据(k-距离图);
  2. 簇形状与噪声比例是否合理;
  3. 业务含义:噪声是异常交易还是测量错误;
  4. 稳定性:ε\varepsilon 微扰下簇是否保持;
  5. 报告:参数、簇规模、噪声率、二维可视化。

七、常见误区​

1. 不看 k-距离就拍 ε\varepsilon​

差一个数量级结果天壤之别。

2. 密度差一个数量级的两簇强求同一 ε\varepsilon​

小密簇变噪声或大稀簇被拆碎。

3. 高维直接欧氏 DBSCAN​

邻域概念崩溃,先降维。

4. 把噪声全删再报“完美分群”​

应分析噪声来源。

5. 与有监督准确率混谈​

无标签时用内部稳定性与业务剖面。

附:建模论文中的写法要点​

  1. 问题对应:用一两句话说明为何该方法匹配题目数据结构与目标(分类/分群/排序/效率)。
  2. 符号与步骤:按“输入 → 预处理 → 核心计算 → 输出指标”列出编号步骤,公式与代码变量名一致。
  3. 参数表:列出全部可调参数、取值、选取依据(CV、信息准则、业务约束或灵敏度)。
  4. 结果呈现:主结果用表格;辅以 1–2 张图(边界、树状图、得分条形图、效率分解等)。
  5. 稳健性:至少做一种扰动——删点、换权重、换距离、换初值或换阈值,观察结论是否保持。
  6. 局限:主动写明假设(球状簇、线性可分、CRS、完全补偿等)及适用边界,避免被质询时被动。

若主方法结论与合理基线(如 K-means 对 GMM、加权和对 TOPSIS、CCR 对 BCC)严重冲突,应回到数据质量与指标方向检查,而不是只报告“更好看”的一种结果。

附:计算检查清单​

在提交结果前,建议按下列清单快速自检:

  1. 输入矩阵:行/列含义是否与正文一致,有无缺失、重复行、单位混用。
  2. 方向与尺度:极小型是否已正向化;聚类/距离类是否已标准化;评价类权重是否归一。
  3. 参数来源:所有阈值、簇数、核宽、理想解定义能否在正文找到依据。
  4. 数值稳定:协方差/相关是否接近奇异;DEA 线性规划是否全部求解成功;对数/除零是否加保护。
  5. 随机性:涉及随机初值的算法是否固定种子并报告多次结果的稳定性。
  6. 验证协议:分类任务是否严格隔离测试集;重采样/SMOTE 是否仅用于训练折。
  7. 图表编号:主结论表与图在正文中被引用,而不是只放附录。
  8. 可复现:给出软件版本(如 MATLAB R20xx)与关键函数名,使读者能重跑最小示例。

不满足清单中任一项时,优先修正流程,再讨论“方法先进性”。对综合评价题,额外检查:更换一种合理权重后,前三名是否大体稳定;若剧烈跳动,应降低对精细名次的措辞强度。

八、小结​

DBSCAN 以核心点的密度可达定义任意形状簇,并把低密度点标为噪声,是空间与异常并存场景的首选之一。

调参焦点是 ε\varepsilon + MinPts;密度多尺度时转向 OPTICS。

补充说明:方法细节以正文公式与 MATLAB 示例为准;若工具箱函数名随版本变化,可用本文手写实现对照复现核心步骤。