3.Mean Shift 聚类
Mean Shift 聚类原理
(1). 欧式空间 X 中,有一个有限点的集合 S 。 K 是一个 flat 核,即
简单说来, K 标记 x 是否在以原点为圆心,半径为 lamda 的球体内。
(2). 在 x 处的样本均值表示为
即在以 x 为圆心的球体内所有样本点的均值,而 m(x) –x 即是传说中的“均值飘移”,而 mean-shift 算法是一个迭代过程,每次迭代中用样本点所在球体内的样本均值代替原样本点(圆心),至“均值飘移”小于某阈值。听起来是不是有点似曾相识的感觉? Kmeans?
实际上, MeanShift 算法可以以下三种方式扩展成更通用的聚类算法:
(1). 使用其他 kernel
(2). 每个点可以赋予不同权重
(3). 可以在空间 X 的任意子集上进行飘移,而 S 保持不变
而且在某些限定条件下成为我们所熟知的一些聚类方法,比如最大熵、 Kmeans 等方法。同时 mean shift 还可以看成对数据密度的梯度估计,用于寻找概率密度函数的波峰,因此提供了一种无需指定聚类数量的更自然的聚类方法。有兴趣的看官可以看一下 PAMI 上两篇论文:《 Mean Shift, Mode Seeking, and Clustering 》和《 Mean Shift :A Robust Approach Toward Feature Space Analysis 》
mahout采用类似于Canopy聚类的方法的方法实现,使用MeanShiftCanopy对象表示mean shift的窗口(即球体或核函数),并使用Canopy聚类的T1表示球体的半径,T2表示两个canopy是否足够近而需要合并。
聚类过程如下:
(1)初始化,每个数据点代表一个MeanShiftCanopy
(2)根据T1计算每个Canopy的mean shift向量,表示其质心;任意两个Canopy质心距离小于T2,则合并之。