美文网首页程序员
MeanShift聚类算法及代码实现

MeanShift聚类算法及代码实现

作者: Leo蓝色 | 来源:发表于2018-12-27 18:13 被阅读4次

MeanShift

该算法也叫做均值漂移,在目标追踪中应用广泛。本身其实是一种基于密度的聚类算法。
主要思路是:计算某一点A与其周围半径R内的向量距离的平均值M,计算出该点下一步漂移(移动)的方向(A=M+A)。当该点不再移动时,其与周围点形成一个类簇,计算这个类簇与历史类簇的距离,满足小于阈值D即合并为同一个类簇,不满足则自身形成一个类簇。直到所有的数据点选取完毕。

一般形式

对于给定的 n 维空间R^n 中的 m 个样本点X^i,i=1...m,对于其中一个样本X,他的均值漂移向量为:M_h(X)=\frac{1}{K}*\sum_{X^i\in S_h}(X^i-X),其中S_h指的是一个半径为h的球状领域,定义为S_h(X)=\{y|(y-x)(y-x)^T \le h^2\},如下图所示

示例1
蓝色圈内表示半径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作者写的

相关文章

网友评论

    本文标题:MeanShift聚类算法及代码实现

    本文链接:https://www.haomeiwen.com/subject/gcsdlqtx.html