简略的meanshift算法

MeanShift算法可以看作是使多个随机中心点向着密度最大的方向移动,最终得到多个最大密度中心。
可以看成初始有多个随机初始中心,每个中心都有一个半径为bandwidth的圆,我们要做的就是求解一个向量,使得圆心一直往数据集密度最大的方向移动,也就是每次迭代的时候,都是找到圆里面点的平均位置作为新的圆心位置,直到满足某个条件不再迭代,这时候的圆心也就是密度中心。

原文链接:https://blog.csdn.net/yanwande/article/details/50387735
基本思想如网页https://blog.csdn.net/weixin_39249915/article/details/90171173所示
本文主要补充一下两点:
1.对公式的说明
在这里插入图片描述
在这里插入图片描述
这里的K为蓝色大圆中包含的所有点的个数,计算出来的均值偏移向量即为上面第二个图中的黄色箭头。来自http://www.seotest.cn/jishu/33702.html

2.对https://blog.csdn.net/weixin_39249915/article/details/90171173算法的精细描述
假设在一个多维空间中有很多数据点需要进行聚类,Mean Shift的过程如下:

预备工作:为所有点维护一个m行n列的矩阵A,初始化为0,m是点的个数,n是目前已得到的聚类个数。
元素(m,n)指的是m号点被n号聚类访问的次数(访问的定义如下)。

1、在未被标记的数据点中随机选择一个点作为中心center,这个center属于新的聚类c2,为所有点都生成一个m行1列的0矩阵B,元素(m,0)表明m号点被c2访问的次数;

2、找出离center距离在bandwidth之内的所有点,记做集合M,认为这些点属于类c2(这些点被c2访问),对这些点进行标记。同时,把B这些点对应的元素加1(被c2访问的次数),这个参数将用于步骤7的分类。

3、以center为中心点,计算从center开始到集合M中每个元素的向量,将这些向量相加,得到向量shift。

4、center = center+shift。即center沿着shift的方向移动,移动距离是||shift||。

5、重复步骤2、3、4,直到shift的大小很小(就是迭代到收敛),记住此时的center。注意,这个迭代过程中遇到的点(圆内的点)都应该归类到簇c2。

6、如果收敛时当前簇c2的center与其它已经存在的簇c1中心的距离小于阈值,那么把c2和c1合并成簇c,把A中c1对应的列和B相加,这一列表明点被簇c访问的次数。否则,把c2作为新的聚类,在A中增加一列,用B进行赋值,表明点被c2访问的次数,增加1类。

6、重复1、2、3、4、5直到所有的点都被标记访问。

7、分类:根据每个类,对每个点的访问频率,取访问次数最大的那个类,作为当前点集的所属类。

简单的说,mean shift就是沿着密度上升的方向寻找同属一个簇的数据点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值