MeanShift
该算法也叫做均值漂移,在目标追踪中应用广泛。本身其实是一种基于密度的聚类算法。
主要思路是:计算某一点A与其周围半径R内的向量距离的平均值M,计算出该点下一步漂移(移动)的方向(A=M+A)。当该点不再移动时,其与周围点形成一个类簇,计算这个类簇与历史类簇的距离,满足小于阈值D即合并为同一个类簇,不满足则自身形成一个类簇。直到所有的数据点选取完毕。
一般形式
对于给定的 n 维空间 中的 m 个样本点
,i=1...m,对于其中一个样本X,他的均值漂移向量为:
,其中
指的是一个半径为h的球状领域,定义为
,如下图所示
蓝色圈内表示半径h的区域
由上图可以看到,横坐标指的是两变量之间的距离。距离越近(接近于0)则函数值越大,否则越小。h越大,相同距离的情况下 函数值会越小。因此我们可以选取适当的h值,得到满足上述要求的那种权重(两变量距离越近,得到权重越大),故经过核函数改进后的均值漂移为:
与KMeans相比较而言,meashift可以不用指定类簇的个数,自动发现类簇结构。
但是Kmeans也类似,发现的类簇多为球状类簇,不能发现一些混合度较高,非球状类簇。
下面是经过调参得到的分为3个类图像。此时
MeanShift(radius=1.5,distance_between_groups=2.3,use_gk=use_gk)
此处实现的与sklearn中的MeanShift不同,后续会研究一下sklearn的实现方法。
参考文献
1.简单易学的机器学习算法——Mean Shift聚类算法
2.python机器学习算法-赵志勇
1中的文章也是2作者写的
网友评论