【每天一个知识点】均值偏移(Mean-Shift)
“均值偏移(Mean-Shift)” 是一种 基于密度的聚类算法,常用于图像处理、目标跟踪、模态检测等领域。其核心思想是:通过滑动窗口不断朝密度最大方向移动,直到收敛于密度极大点(模态),最终将靠近相同模态的点归为一类。
一、基本原理
均值偏移的核心过程是:
-
对每个点设置一个固定大小的核函数(通常是高斯核);
-
在核窗口内计算加权平均值(均值);
-
将窗口向该均值方向移动;
-
重复上述过程,直到移动距离小于设定阈值(收敛);
-
所有最终收敛到相同点(或足够近的点)的样本归为一类。
二、数学表达
假设点集为 {x1,x2,…,xn},使用带核函数的加权均值计算移动向量:
其中:
-
x:当前中心点;
-
K(⋅):核函数,常用的是高斯核;
-
m(x):均值偏移向量,指示方向;
-
不断迭代 x←x+m(x) 直到收敛。
三、算法流程(伪代码)
输入:样本点集 X,核带宽 h
输出:聚类中心,类别标签1. 对每个点 x ∈ X:a. 初始化点 y ← xb. while not converge:i. 在以 y 为中心的窗口内找所有点 zii. 计算均值 μ ← sum(K(||z - y||) * z) / sum(K(||z - y||))iii. 更新 y ← μc. 将收敛后的 y 记录为一个聚类中心2. 对所有聚类中心进行合并(若距离小于阈值)
3. 给所有样本点分配最近的聚类中心作为类别
四、特性
特性 | 描述 |
---|---|
不需要预设聚类个数 | 自动根据数据密度确定聚类数量 |
非参数模型 | 不假设数据分布形式,适合非高斯形状数据 |
对噪声鲁棒 | 不属于任何模态的点会自然排除在外 |
计算代价高 | 每个点都要迭代查找密度峰值,效率较低(可用KD-Tree优化) |
五、可视化示意图
想象如下图所示的数据分布:
** * ** * ** * * ← 密度高的地方,中心会向这边移动
均值偏移算法从每个点开始,不断向密度更高的区域移动,最终多个点会聚到几个“模态”,形成聚类中心。
六、应用场景
-
图像分割(将像素按颜色/空间位置聚类)
-
目标跟踪(对象在图像序列中的平滑移动)
-
模态检测(寻找概率密度函数的局部最大点)
-
异常检测(低密度区域的点被排除在聚类之外)