Medoid Shift 算法简述

Medoid Shift(中心点偏移) 算法

Medoid Shift (中心点偏移)是一种应用核密度估计的非参数mode(算法中代表密度局部最大值)搜索算法,是基于medoids(中心点) 的加权来估计局部的近似梯度,通过计算shift从而向数据密度更大的区域偏移。Medoid shifts 可以用于增长数据集的增量聚类,图像分割、使用增量聚类进行镜头分割和对非线性可分离数据进行聚类等[1] 。

Medoid Shift算法分析

Medoid shift 与Mean shift

Medoid shift 算法是源于Mean shift 算法(查看参考文献[2])的思想,它的理论和过程和Mean shift有很类似的地方。它们都是通过计算shift向数据密度更大的区域偏移,通过迭代找到聚类中心,自动计算聚类数,并且数据不必线性可分。与Mean shift不同,Medoid shift不需要mean的定义,medoid不需要明确的特征空间,只需要定义有效的样本点距离度量。两者最大的不同是相较于Mean shift 算法中计算shift是找均值偏移向量位置,Medoid shift算法计算shift寻找的是距离偏移最近的数据集里的点

用公式表示两者的过程, y k y_k yk代表当前数据点的位置, y k + 1 y_{k+1} yk+1代表算法计算的下一个位置。

Note: 公式是直接复制自文献[1],但是为什么这样表示,可以查看参考文献[2]公式(12),这里其实是求密度梯度估计。

Mean shift可以表示如下[1]
y k + 1 m e a n = a r g m i n y ∑ i ∥ x i − y ∥ 2 φ ( ∥ x i − y k h ∥ 2 ) ( 1 ) y_{k+1}^{mean} = \mathop{arg min}_{y} \sum_{i}\parallel x_i -y\parallel^2\varphi(\parallel\frac{x_i -y_k}{h} \parallel^2) \quad \quad \quad \quad \quad \quad (1) yk+1mean=argminyixiy2φ(hxiyk2)(1)
Medoid shift可以表示如下[1]
y k + 1 m e d o i d = a r g m i n y ∈ x i ∑ i ∥ x i − y ∥ 2 φ ( ∥ x i − y k h ∥ 2 ) ( 2 ) y_{k+1}^{medoid} = \mathop{arg min}_{y\in{x_i}} \sum_{i}\parallel x_i -y\parallel^2\varphi(\parallel\frac{x_i -y_k}{h} \parallel^2) \quad \quad \quad \quad \quad (2) yk+1medoid=argminyxiixiy2φ(hxiyk2)(2)
可以看到,Mean shift 选择最小化函数(1)的位置 y y y,而 Medoid shift 选择最小化函数(2)的数据样本点 x i x_i xi。具体如下图一所示。

在这里插入图片描述​ 图一(来源于参考文献[1] 中Figure1)

Medoid shift算法

Medoid shift 其实可以理解为把整个数据集看成一个森林,每个单独的簇类代表森林里的多个不相交的树(森林里可以有多棵树,一棵树代表一个簇),其中每棵树由属于同一簇的node节点(对应样本点)组成,每棵树的根对应于该树指定的mode(簇类中心)。Medoid shift 在数据点 y ( k ) y(k) y(k) 与其对应的 y ( k + 1 ) y(k+1) y(k+1) 之间建立一个有向边,可以使用单个树遍历将簇类分配给与该树相关联的所有点。可以理解成类似于下图二的连接方式
在这里插入图片描述 图二(来源于参考文献[3] 中Figure1)

对于Medoid shift聚类,由于 ∀ k , y k ∈ x i \forall k,y_k\in{x_i} kykxi,对于任何 y k , y k + 1 y_k,y_{k+1} ykyk+1必然属于样本集中的一个点。 因此,在每一次计算新的mode点的时候,每个数据样本点只需要计算一次shift偏移。 一旦为数据集中的所有样本点计算了shift偏移,那么所有 y k + 1 y_{k+1} yk+1 的下一个shift偏移就已经存在了[2]。

如果在一次迭代中某个样本点的 y k y_k yk y k + 1 y_{k+1} yk+1 相同,则认为这个样本点是这次迭代的其中一个mode(并非最终的mode)。Medoid shift聚类算法中,除了第一次计算使用所有的样本点,后续迭代计算是以上一次迭代得出的所有mode点作为新的样本点进行计算 y k + 1 y_{k+1} yk+1的,一直迭代到mode点的个数不再变化,则认为所有的正确的mode点已经找到了

Medoid shift算法过程图示
  1. 以下图的数据集为例 (图示的坐标轴有点差别)
    在这里插入图片描述 图三
  1. 根据公式(2)计算数据集中每个样本点 y k y_k yk的medoid shift 的 y k + 1 y_{k+1} yk+1, y k y_k yk代表当前数据点的位置, y k + 1 y_{k+1} yk+1代表算法计算的下一个位置。计算得出的第一次中 y k y_k yk y k + 1 y_{k+1} yk+1 相同的点为图中红色点所示。(图示的坐标轴有点差别)
    在这里插入图片描述​ 图四
  1. 以2中得到的mode点作为新的样本点,计算每个新样本点 y k y_k yk的medoid shift 的 y k + 1 y_{k+1} yk+1(图示的坐标轴有点差别)
    在这里插入图片描述
    图五

  2. 直到mode点的个数不再变化,则medoid shift的算法结束。(图示的坐标轴有点差别)
    在这里插入图片描述 图六

  3. 最终经过medoid shift 算法后,得到的不同簇和簇中心如下图七所示。(图示的坐标轴有点差别)
    在这里插入图片描述
    图七

Medoid shift算法实现

算法的实现,其实在文献[1]中已经有非常详细的讲解了,这里直接引用了。
在这里插入图片描述
下面是采用矩阵运算来代替上面算法的步骤1,用于简化计算。
在这里插入图片描述
为什么可以用矩阵来代替计算呢?文献[1]中也做了详细的解答,这里直接引用。
在这里插入图片描述

总结

总的来说,Medoid shift 算法其实是Mean shift 算法的改进型。其相对于Mean shift 算法具有一下三个优势[3]:

  1. 对于每一个样本点 x i x_i xi向聚类中心mode偏移的轨迹 y i ( 1 ) , i = 1 , 2 , ⋯   , N y_i(1),i = 1,2,\cdots,N yi(1),i=1,2,,N只需要计算一次(因为 y i ( t + 1 ) = y y i ( t ) ( 1 ) y_i(t+1) = y_{y_i(t)}(1) yi(t+1)=yyi(t)(1)

  2. 不需要停止迭代和合并聚类的相关条件。

  3. 数据特征空间可能是非欧几里得的,只需要定义点的距离度量即可。

Note:代码参考可以查看[4] Python版本 ,[5] matlab 和C++ 版本。

参考文献

[1] Y. A. Sheikh, E. A. Khan and T. Kanade, “Mode-seeking by Medoidshifts,” 2007 IEEE 11th International Conference on Computer Vision, 2007, pp. 1-8, doi: 10.1109/ICCV.2007.4408978.

[2] Comaniciu D , Meer P . Meer, P.: Mean shift: A Robust Approach Toward Feature Space Analysis. IEEE Transactions on Pattern Analysis and Machine Intelligence 24(5), 603-619[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2002, 24(5):603-619.

[3] Vedaldi, A. , and S. Soatto . “Quick Shift and Kernel Methods for Mode Seeking.” European Conference on Computer Vision DBLP, 2008.

代码参考

[4] MedoidShift and Quickshift algorithms Implementation https://github.com/Nick-Ol/MedoidShift-and-QuickShift

[5] https://gitee.com/bryantdai/cv-paper-reproduction/tree/master/Medoid%20Shift

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值