图解Mean-Shift聚类算法

前期回顾

K-Means聚类算法 — 算法原理、质心计算、距离度量、聚类效果评价及优缺点

   与K-Means算法不一样的是,Mean Shift 算法可以自动决定类别的数目。与K-Means算法一样的是,两者都用集合内数据点的均值进行中心点的移动。


声明

以下部分内容来源于:meanshift算法


Mean Shift算法原理

   meanshift 算法其实通过名字就可以看到该算法的核心,mean(均值),shift(偏移),简单的说,也就是有一个点 x x x,它的周围有很多个点 x i x_i xi 我们计算点 x x x移动到每个点 x i x_i xi,所需要的偏移量之和,求平均,就得到平均偏移量,(该偏移量的方向是周围点分布密集的方向)该偏移量是包含大小和方向的。然后点 x x x就往平均偏移量方向移动,再以此为新的起点不断迭代直到满足一定条件结束。

图解如下:
在这里插入图片描述
   中心点 x x x 周围的小红点就是 x i x_i xi,黄色的箭头就是我们求解得到的平均偏移向量。那个“圆圈”就是我们的限制条件,或者说在图像处理中,就是我们搜索迭代时的窗口大小。不过在opencv中,我们一般用的是矩形窗口,而且是图像,2维的。这里其实不是圆,而是一个高维的球。

步骤:

  1. 首先设定起始点 x x x,我们说了,是球,所以有半径 h h h, 所有在球内的点就是 x i x_i xi , 黑色箭头就是我们计算出来的向量 , 将所有的向量 进行求和计算平均就得到我们的meanshift 向量,也就是图中黄色的向量。

  2. 以meanshift向量的重点为圆心,再做一个高维的球,如下图所示,重复上面的步骤,最终就可以收敛到点的分布中密度最大的地方
    在这里插入图片描述
    最终结果如下:
    在这里插入图片描述


Mean-Shift聚类流程:(点击查看原博客)

假设在一个多维空间中有很多数据点需要进行聚类,Mean-Shift的过程如下:

在这里插入图片描述

开始
	1. 在未被标记的数据点中随机选择一个点作为中心center;
	
	    2. 找出离center距离在bandwidth之内的所有点,记做集合M,认为这些点属于簇c。同时,把这个球内部点(属于这个类)的概率加1,这个参数将用于最后步骤的分类
	
	    3. 以center为中心点,计算从center开始到集合M中每个元素的向量,将这些向量相加,得到向量shift。
	
	    4. center = center+shift。即center沿着shift的方向移动,移动距离是||shift||5. 重复步骤234,直到shift的大小很小(就是迭代到收敛),记住此时的center。注意,这个迭代过程中遇到的点都应该归类到簇c。

6、如果收敛时当前簇c的center与其它已经存在的簇c2中心的距离小于阈值,那么把c2和c合并。否则,把c作为新的聚类,增加1类。

7、重复12345直到所有的点都被标记访问。

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

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

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值