一句话定义:Mean Shift(均值漂移)是一种不需要事先指定簇数的聚类算法——每个数据点不断朝周围密度更高的方向挪动,最后停在密度峰上,停在同一座峰的点就算一类。
它是怎么工作的
想象一群人在大雾弥漫的山坡上,每个人只能看清身边十几米。规则只有一条:朝周围人最多的方向挪一步,然后重新看一遍,再挪一步。一直重复。结果是所有人都往山顶聚——山顶就是人群密度最高的地方,一座山顶对应一个簇。站在山腰的人会自己爬上去,站在两个山头之间的人会被更近的那个吸走。整个过程没有人告诉他们"一共有几座山"。
数学上每一步做两件事:以当前点为中心开一个半径 h 的窗口(这个半径叫带宽,bandwidth),算出窗口内所有点的平均位置(重心),把窗口中心移到重心上;重复到位移小于阈值为止。因为重心总是被密度高的一侧拽过去,所以叫"均值漂移"。收敛到的位置叫众数(mode)。
带宽 h 是唯一真正要紧的超参:h 太小,一座山被切成许多小尖,簇数爆炸;h 太大,几座山被抹成一坨。实践里常从小到大试几个值,看结果稳不稳定,具体取值以数据分布为准。
和邻居们的区别
| 算法 | 要不要预设簇数 | 划分依据 | 典型输出 |
|---|---|---|---|
| K-Means | 要,必须先给 k | 到中心的距离 | k 个中心 |
| DBSCAN | 不要 | 密度连通 | 簇标签 + 噪声 |
| Mean Shift | 不要 | 密度梯度上升 | 若干密度峰 |
和 K-Means 比,它不用猜 k,也不假设簇是球形;和 DBSCAN 比,它不是"连边成团",而是"爬山找峰",所以能直接给出峰的位置;和高斯混合模型比,它不假设数据服从什么分布,是非参数方法,代价是没法直接输出概率。
对从业者和普通人的意义
工程上,Mean Shift 最经典的战场是计算机视觉:目标跟踪时把颜色分布当密度,窗口自动往相似度高的方向漂移;图像平滑与分割时把"颜色 + 坐标"当成点,聚类后同一片颜色被抹平,边缘保留下来。它也是探索性分析的好工具——当你根本不知道数据里有几类时,先跑一遍看看峰在哪,比硬凑一个 k 更诚实。
它的短板同样明显:每步都要算邻域,数据量大时慢;高维空间里密度估计会失效,通常先降维再做。
对非技术岗位的人来说,它提供了一个很好的思维模型:不必先决定要分成几堆,只要定下"往人多的地方走"这一条局部规则,全局结构会自己浮现出来。
