密度连通聚类
密度聚类
用邻域半径与最少点数定义核心点,把密度可达的住房连成任意形状的口袋,并把够不着的点标成噪声。
这篇能回答什么
密度聚类(DBSCAN)回答的是「哪些点挤在足够密的口袋里,哪些点是够不着的稀疏噪声」。它不预设球形,也不把 K 写进目标函数:你只提供邻域半径 ε 与最少点数 MinPts。核心点的 ε-球里至少有 MinPts 个邻居(含自己);从核心点出发、一串密度可达的点构成一簇。边界点贴在某个核心旁边但自己不够密;哪里都贴不上的点是噪声。
适合:商圈经纬度、弯曲的价格带、带离群挂牌的住房表。本页仍用综合评价表的面积(平米)、楼层、总楼层、单价(元/平米)、总价(万元)。教学占用把 265 个完整个案记成三类口袋:A 75、B 39、C 151。三类频数加总等于合计,因此这张四列表里没有单独的噪声行。
什么时候不该用
簇大致球形、规模相近、你已经想好 K 时,K-Means 聚类分析更省事。想看见完整合并史,用分层聚类。定类列(城市、区域、房屋类型)没有邻域半径,不要塞进 ε-球。有金标准标签时应做监督分类,而不是用密度去「发现」已知组别。
如何选择方法
先看簇形和离群点。口袋可以拉长、中间有空洞、边上有散点 → DBSCAN。只要中心和轮廓、并且每个点都必须进某一簇 → K-Means。要树状合并路径 → 分层聚类。定量加房屋类型混用、还想让 BIC 建议簇数 → 二阶聚类。
密度聚类:≥2 个定量特征,设定 ε 与 MinPts;输出密度口袋占用,必要时另有噪声类别。
K-Means:每个点强制进最近中心,没有噪声标签。
分层聚类:完整树,事后切枝,通常也不单独标噪声。
线性判别:已有组别,找分开各组的投影轴。
输入、输出与限制
输入
特征为定量。ε 是标准化空间里的半径,MinPts 是整数。两者都不是数据列。有效行应明显大于 MinPts,否则几乎没有核心点。
聚类特征:最少 2 个,最多 50 个定量变量。
邻域半径 ε、最小点数 MinPts:超参数;MinPts 常用 4 或约 2×维数。
输出
教学表四列仍是项目、类别、统计量、取值。类别 A / B / C 是密度口袋的占用。若某次运行标出了噪声,它会以另一行类别出现在同一张表里(例如类别名写成噪声),不会多出一列。本教学三类加总等于 N,故没有噪声行可引。
产品限制
ε 对量纲极度敏感,工作台通常先 Z-score;未标准化的 SPSS / sklearn 对照会整表改写。
密度不均匀时,一组 (ε, MinPts) 很难同时保住小口袋 B 又不把 C 粘成一片。
散点若做了二维投影,长条口袋可能看起来「不像一簇」,以标签表为准。
房源ID、小区名称不能当邻域坐标。
这些超参数范围来自 StatsX 工作台,不是某一篇教材的固定 ε。
案例
研究问题。 综合评价教学表里,部分挂牌在面积—单价平面上挤成口袋,也有孤立的极端总价。研究者想按密度连通分群,并保留「可以没有噪声 / 一旦调参就出现噪声」的解释,而不是强迫每套房都进某个中心。
教学表示例工作表为「Sheet1」。完整个案 265。口袋占用:A 75(28.3%),B 39(14.72%),C 151(56.98%)。B 是最瘦的口袋,调大 MinPts 或缩小 ε 时最先散成噪声。下载后:特征勾选面积(平米)、楼层、总楼层、单价(元/平米)、总价(万元);不要勾选房源ID、城市、区域、小区名称、装修情况。
在 StatsX 中操作
步骤 1 · 上传表格
打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用综合评价 xlsx,确认工作表为「Sheet1」。单文件不超过 20 MB。
步骤 2 · 查看画像与质量
确认面积(平米)、楼层、总楼层、单价(元/平米)、总价(万元) 为定量,并扫一眼单价与总价的长尾。标识列和定类列全部留在角色之外。
步骤 3 · 选择「密度聚类」
在算法目录搜索「DBSCAN」或「密度」,点选密度聚类。
步骤 4 · 指定特征与邻域参数
聚类特征勾选上述五列定量。先用默认 ε 与 MinPts 跑通,对照本页三类占用;再只动一个参数,看 B 是否从 39 塌缩。不要同时改两个旋钮。点击运行分析。
步骤 5 · 阅读结果
先核三类频数是否加总为合计。若工作台多出噪声行,把它当作第四个类别读占比,仍不要发明新列。散点只是投影,口袋形状以标签为准。




如何阅读输出
下表是密度口袋占用。合计 N=265:A 75(28.3%),B 39(14.72%),C 151(56.98%)。C 是最密、最大的口袋;B 只有 39 套,是最容易在调参后消失的一支。三类频数之和等于 265,所以本切面没有把任何行记成噪声——不是「DBSCAN 不会产生噪声」,而是当前 (ε, MinPts) 把所有完整个案都接进了某个核心链。
| 项目 | 类别 | 统计量 | 取值 |
|---|---|---|---|
| 密度聚类 | 类别 A | 频数 | 75 |
| 密度聚类 | 类别 B | 频数 | 39 |
| 密度聚类 | 类别 C | 频数 | 151 |
| 密度聚类 | 合计 | 有效样本 N | 265 |
| 密度聚类 | 类别 A | 占比(%) | 28.3 |
| 密度聚类 | 类别 B | 占比(%) | 14.72 |
| 密度聚类 | 类别 C | 占比(%) | 56.98 |
左右滑动可查看完整表格
教学示例表在 StatsX 工作台中的计算结果口径。



有效行 265 同样来自五列定量的列表删除,小于综合评价全表。B 占 14.72% 时,不要因为「太小」就手动并进 C——那等于放弃密度定义。若你缩小 ε 后出现噪声行,噪声占比应从同一张四列表里读,而不是另造一列。
阅读顺序:完整个案 N → 口袋个数与占用 → 有没有噪声行 → 最小口袋是否稳得住 → 再看投影图是否把同一标签画散。DBSCAN 的「成功」不是三类接近均等,而是核心点定义在业务上说得通。写方法时报告 ε、MinPts、是否标准化,以及本表有没有噪声类别。
理论与公式
在标准化特征空间中,点 p 的 ε-邻域为 N_ε(p)={q: d(p,q)≤ε}。p 是核心点当且仅当
若 p 是核心且 q 落在 N_ε(p) 内,则 q 从 p 直接密度可达。一串核心把直接可达接起来,得到密度可达,从而定义簇。不属于任何簇的点标为噪声。与 K-Means 不同,噪声不参与任何中心更新——本教学表恰好没有噪声行,是参数把它们都接进去了,不是定义里取消了噪声。簇数是结果,不是输入:
本例观察到 K=3 个口袋,占用 (75,39,151)。k-距离图可辅助挑 ε:把每个点到第 MinPts 近邻的距离排序,拐点附近常是可用半径。维数升高时距离趋于均匀,ε 更难选,应先降维或删掉共线的总价。
注意事项
ε 与 MinPts 必须一起报告。只写「做了 DBSCAN」无法复现口袋。
B 只有 39 套,对参数比 C 敏感得多;稳健性应单独盯这枝。
没有噪声行不等于数据干净,只等于当前半径把离群点也接进了链。
城市、房屋类型不能计算 ε-球,混用请改二阶聚类。
投影图解释方差低时,视觉重叠不能用来否定密度标签。
同一套房被标进口袋,不表示它「属于」某个业务客群名称,标签可以在调参后整批改写。
常见问题
参考文献
Ester, M., Kriegel, H.-P., Sander, J., Xu, X. A density-based algorithm for discovering clusters in large spatial databases with noise[C]//KDD. 1996.
Schubert, E., et al. DBSCAN revisited, revisited: Why and how you should (still) use DBSCAN[J]. ACM Transactions on Database Systems, 2017, 42(3): 1–21.
周志华. 机器学习[M]. 北京: 清华大学出版社, 2016.