做无监督学习相关项目时,我们习惯把聚类理解成“找密度最高的点”,却经常忽略另一类结构:很多真实数据并不是聚集在一堆团块里,而是沿着一条条“山脊线”展开。比如城市道路分析、图像骨架提取、天文光谱映射、单细胞发育轨迹推断,这些场景下你真正想提取的不是类中心点,而是一条连续的结构骨架。要描述这类结构,密度脊(Density Ridge)和子空间约束均值移位(Subspace Constrained Mean Shift,SCMS)是一套非常合适的工具,而围绕它们的收敛性、一致性分析,又是从“能用”到“敢用”的关键。
本文将围绕 Stable Density Ridges 以及 Subspace Constrained Mean Shift 的一致性、收敛性展开。我会先带你建立密度脊的直观理解,再推导它的数学定义,然后完整拆解 SCMS 算法步骤,并结合 Python 做一个可运行的演示,最后给出常见的工程坑点与最佳实践。无论你是在做统计学习理论还是工程落地,这篇文章都可以作为一份系统性的入门笔记。
1. 背景与核心概念
1.1 密度脊是什么
密度脊不是一个新概念,但在机器学习里经常被忽略。简单来说,密度脊是密度函数上一种“沿某个方向不再上升、沿其他方向下降最快”的点集合。
为了理解它,我们先从一座山开始。如果你站在山脊上,会发现山脊线两侧的地势都在下降,只有沿着山脊线继续走,山势还可能继续起伏。在统计密度估计里,数据分布密度函数的“山脊”就是我们要找的密度脊。
严格一点说,设 (p(x)) 是一个定义在 (\mathbb{R}^D) 上的密度函数,如果存在一个 (d) 维的流形,使得密度函数在这个流形的法线方向上具有局部最大值,那么这个流形就是一条秩为 (d) 的密度脊。当 (d=1) 时,它是一条曲线;当 (d=2) 时,它是一张曲面。
一个经典的二维例子是:
- 如果数据分布是单个高斯分布,密度只有一个模式点,不存在一条明显的脊;
- 如果数据分布是一个拉长的高斯分布,那么密度会沿着主轴方向延伸,这条主轴就可以看作一条近似的密度脊;
- 如果数据分布呈“S 形”或“正弦波”形状,那么数据密集的核心区域就是一条一维曲线,即 (d=1) 的脊。
所以密度脊非常适合用来描述数据的低维内在结构,也是流形学习、非线性降维、骨架提取等任务中十分重要的几何对象。
1.2 均值移位与模式寻找
在介绍 SCMS 之前,必须先理解经典均值移位算法。均值移位是一种非参数模式寻找算法,它不需要假设数据服从什么分布,也不需要显式估计出密度函数的解析形式,而是通过迭代将样本点向密度局部极大值方向移动。
给定一组数据点 (x_1, x_2, \dots, x_n),以及核函数 (K),均值移位向量定义为:
[ m(x) = \frac{\sum_{i=1}^n K(x - x_i) x_i}{\sum_{i=1}^n K(x - x_i)} - x ]
迭代更新:
[ x \leftarrow x + m(x) ]
这个更新过程会不断把当前点推向密度更高的区域,最终收敛到某个局部模式附近。均值移位广泛用于图像分割、目标跟踪和聚类,尤其是特征空间中的模式寻找。
但均值移位有一个明显的局限:它只能寻找密度极大值点,也就是“峰”。如果数据本身分布在一条山脊上,标准均值移位会把点推向脊上密度最高的位置,而不是停留在整条脊上。换句话说,它把一条连续结构压缩成了一个或多个点,丢失了形状信息。
1.3 为什么需要 SCMS
既然标准均值移位会把“脊”压成“峰”,自然就有人想到:能不能在迭代过程中约束移动方向,让样本点既能沿着密度上升方向移动,又不会沿着脊的切线方向滑走?
子空间约束均值移位就是为解决这个问题提出的。它的核心思想是:
- 先估计当前点的密度、梯度、Hessian;
- 对 Hessian 做特征分解,找到对应于脊法线方向的若干特征向量;
- 只保留均值移位向量在这些法线方向上的分量,阻止点沿脊线切线方向漂移;
- 反复迭代,使点最终收敛到密度脊上。
因此,SCMS 不是聚类算法,而是一种“脊点搜索算法”。它在寻找结构骨架、主曲线、主流形等任务中非常有价值。
2. 数学基础与形式化定义
要理解 SCMS 的一致性(consistency)与收敛性(convergence),不能只停留在算法直觉上,还需要掌握背后的数学定义。这一部分会从核密度估计开始,逐步推导到脊的数学表达。
2.1 核密度估计
实际场景中我们拿不到真实密度函数 (p(x)),只能用样本估计。最常用的是核密度估计:
[ \hat{p}(x) = \frac{1}{n} \sum_{i=1}^n K_h(x - x_i) ]
其中 (K_h(u) = \frac{1}{h^D} K\left(\frac{u}{h}\right)),(h) 是带宽。核函数 (K) 需要满足非负、积分为 1、对称等条件,常用的有高斯核:
[ K(u) = \frac{1}{(2\pi)^{D/2}} \exp\left(-\frac{1}{2}|u|^2\right) ]
带宽 (h) 是核密度估计里最关键的参数。带宽太小,