聚类 之 MeanShift


上篇博客介绍了基于距离的K-Means聚类,这次给大家推荐一个基于密度的聚类算法:Meanshift(均值漂移)。

Meanshift 聚类基本原理

Meanshift 聚类的主要思路是:计算某一点A与其半径R内的点之间向量距离的平均值M,得到该点下一步的漂移(移动)方向(A=M+A)和距离(||M||)。当该点不再移动时,计算这个点与历史簇中心的距离,满足小于阈值D即合并为同一个类簇,不满足则自身形成一个类簇。直到所有的数据点选取完毕。

Meanshift 聚类流程简述

相比 K-Means 聚类,Meanshift 最大的优势是不需要人为指定分成几类。该算法会根据分布密度自动将数据归到适合的类中。

Meanshift 聚类算法的大致思想就是 “哪里人多哪里跑” :

首先,将所有数据点设置为未标价状态。

  1. 未被标记的数据中随机选取一个点作为初始大佬(质心);
    由于事先并不知道会聚成几类,所以只能一类一类的聚,最后聚成几类就几类了╮(╯▽╰)╭。
  2. 以当前大佬为圆心,半径为 R R R(超参1) 画个圆,圆内的点记做集合 M M M,里面为该位大佬的小弟;为了方便日后相认,大佬决定给小弟们一张带来自己标识的保命卡进行标记
  3. 由于是随机选择的大佬,难以服众。这位大佬的小弟们提出要召开选举大会,选出新的大佬(即通过算法选出新的质心);
  • 投票依据:这一届的小弟都很喜欢热闹,哪里人多就往哪边投。依次计算各位小弟到该大佬的向量距离(黑色向量)的平均值 s h i f t shift shift(绿色向量),如下图所示。
  • 更新方式:旧大佬(蓝色圆圈)沿着投票方向即shift向量的方向移动,移动距离是||shift||,即为新大佬的位置(橙色圆圈)。也就是说这个大佬是“虚拟的”。
  1. 迭代2~3步骤,直到新大佬和旧大佬之间的偏移量小于某一个设置的阈值 δ \delta δ (超参2),即表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛。从而得到一个候选大佬(还不是正式的哈,晋级之路漫漫其修远兮)。
  2. 比较这位候选大佬跟正式大佬的距离,若距离小于指定的阈值 ω \omega ω(超参3),则合并这两个大佬。否则,将该候选大佬提升为正式大佬,类别数加1;
  3. 迭代上述1~5步骤,直到所有数据点都被标记;
  4. 正式大佬全部确定下来后,小弟们就要选择投靠哪位大佬了。根据大佬在晋级路上发给小弟们的保命卡数量(即每个正式大佬对每个小弟的访问频数),小弟们选择投靠给自己保命卡最多的大佬(即对自己访问频数最大的那个大佬)。看样子小弟们还是很念旧情的哈。
  • 注意:上面涉及的三个超参是需要用户人为指定的哈。

在这里插入图片描述

实例演示

看了上面的原理简述,估计还是有点糊涂,下面举一个非常形象简单的例子。

如下图所示,有6个点,从图上看应该可以分成两堆,前三个点一堆,后三个点另一堆。现在我手工地把MeanShift 算法的计算过程演示一下,同时检验是不是和预期一致:
在这里插入图片描述

  1. 随机选择一个初始大佬(就选 P2),开始它的晋级之路;

  2. R = 5 R=5 R=5 为半径,圈定大佬的势力范围。在范围内的点 P1、P3 即为该大佬的小弟。大佬为了笼络小弟们的心,给范围内的小弟人手一张保命卡。此时所有数据点的保命符情况:

保命符 P1 P2 P3 P4 P5 P6
大佬1 1 0 1 0 0 0
  1. 召开选举大会,重新选大佬。

    首先,计算各位小弟到该大佬的向量距离(黑色向量)的平均值 s h i f t shift shift

P1 P3
距离向量 ( − 1 , − 2 ) (-1,-2) (1,2) ( 2 , − 1 ) (2,-1) (2,1)

则, s h i f t = ( − 1 + 2 2 , − 2 − 1 2 ) = ( 0.5 , − 1.5 ) shift=(\dfrac{-1+2}{2}, \dfrac{-2-1}{2})=(0.5,-1.5) shift=(21+2221)=0.51.5

此时,旧大佬沿着shift向量的方向进行漂移,漂移长度为||shift||,即为新大佬 P 哥的位置: ( 1 , 2 ) + ( 0.5 , − 1.5 ) = ( 1.5 , 0.5 ) (1,2)+(0.5, -1.5) = (1.5, 0.5) (1,2)+(0.5,1.5)=(1.5,0.5)

  1. 令超参 δ = 1 \delta=1
  • 21
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值