聚类算法之Mean Shift

article/2025/11/6 14:28:41

Mean Shift聚类算法

1. 基本原理

对于Mean Shift算法,是一个迭代得步骤,即每次迭代的时候,都是找到圆里面点的平均位置作为新的圆心位置。说的简单一点,使得圆心一直往数据密集度最大的方向移动。
在这里插入图片描述

2. 基本的Mean Shift向量形式

对于给定的 d d d维空间 R d R^d Rd中的 n n n个样本点 x i , i = 1 , 2 , . . . , n x_i, i=1,2,...,n xi,i=1,2,...,n,对于空间中的任意点 x x xmean shift向量的基本形式可以表示为:
M h ( x ) = 1 k ∑ x i ∈ S h ( x i − x ) M_h(x)=\frac {1}{k}\sum_{x_i \in S_h}(x_i-x) Mh(x)=k1xiSh(xix)
其中, k k k表示的是数据集中的点到 x x x小于球半径 h h h的数据点的个数, S h S_h Sh是一个半径为 h h h的高维球区域, S h S_h Sh的定义为:
S h ( x ) = ( y ∣ ( y − x ) ( y − x ) T ≤ h 2 ) S_h(x)=(y|(y-x)(y-x)^T \leq h^2) Sh(x)=(y(yx)(yx)Th2)

这样的一种基本的Mean Shift形式存在一个问题:在 S h S_h Sh区域内,每一个点对 x x x的贡献都是一样的,而实际上,这种贡献与 x x x到每一个点之间的距离是相关的,同时,对于每一个样本,其重要程度也不一样。

3. 改进的Mean Shift向量形式

假设在 S h S_h Sh范围内,为了使得每一个样本点 x i x_i xi对于样本 x x x的贡献不一样,向基本的Mean Shift向量形式中增加核函数,得到如下的改进的Mean Shift向量形式:
M h ( x ) = ∑ x i ∈ S h [ K ( x i − x h ) ( x i − x ) ] ∑ x i ∈ S h [ K ( x i − x h ) ] M_h(x)=\frac {\sum_{x_i \in S_h}[K(\frac {x_i-x} {h})(x_i-x)]} {\sum_{x_i \in S_h}[K(\frac {x_i-x} {h})]} Mh(x)=xiSh[K(hxix)]xiSh[K(hxix)(xix)]
其中 K ( x i − x h ) K(\frac {x_i-x} {h}) K(hxix)是高斯核函数,其函数形式如下:
K ( x 1 , x 2 ) = K ( x 1 − x 2 h ) = 1 2 π h e − ( x 1 − x 2 ) 2 2 h 2 K(x_1,x_2)=K(\frac {x_1-x_2} {h})=\frac {1} {\sqrt {2\pi}h}e^{-\frac {(x_1-x_2)^2}{2h^2}} K(x1,x2)=K(hx1x2)=2π h1e2h2(x1x2)2
其中, h h h称为带宽bandwidth,即高维球区域 S h S_h Sh的半径,不同带宽的核函数如下所示:
在这里插入图片描述

从图像可以看出,当带宽 h h h一定时,样本点之间的距离越近,其核函数的值越大;当样本点之间的距离相等时,随着高斯核函数的带宽 h h h的增大,核函数的值在减小

4. Mean Shift聚类流程

  1. 在未被标记的数据点中随机选择一个点作为中心center

  2. 找出离center距离在bandwidth之内的所有点,记做集合 M M M,认为这些点属于簇 c c c同时,把这些求内点属于这个类的概率加1,这个参数将用于最后步骤的分类

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

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

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

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

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

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

5. 实例演示

import numpy as np 
import matplotlib.pyplot as plt from sklearn import cluster, datasets
from sklearn.preprocessing import StandardScalernp.random.seed(0)# 构建数据
n_samples = 1500
noisy_circles = datasets.make_circles(n_samples=n_samples, factor=0.5, noise=0.05)
noisy_moons = datasets.make_moons(n_samples=n_samples, noise=0.05)
blobs = datasets.make_blobs(n_samples=n_samples, random_state=8)data_sets = [(noisy_circles,{"quantile": 0.3}),(noisy_moons,{"quantile": 0.3}), (blobs, {"quantile": 0.3})
]
colors = ["#377eb8", "#ff7f00", "#4daf4a"]plt.figure(figsize=(15, 5))for i_dataset, (dataset, algo_params) in enumerate(data_sets):# 模型参数params = algo_params# 数据X, y = datasetX = StandardScaler().fit_transform(X)# 设置bandwidthbandwidth = cluster.estimate_bandwidth(X, quantile=params['quantile'])# 创建Mean Shiftms = cluster.MeanShift(bandwidth=bandwidth, bin_seeding=True)# 训练ms.fit(X)# 预测y_pred = ms.predict(X)y_pred_colors = []for i in y_pred:y_pred_colors.append(colors[i])plt.subplot(1, 3, i_dataset+1)plt.scatter(X[:, 0], X[:, 1], color=y_pred_colors)plt.show()

在这里插入图片描述

6. Mean Shift小结

优点:不用选择簇的数量;缺点:固定了bandwidth


http://chatgpt.dhexx.cn/article/OSUnIh5A.shtml

相关文章

meanshift跟踪算法

以下是用meanshift实现目标跟踪的实验报告(包含源码),实验中详细介绍了meanshift跟踪算法的原理,结合OTB100跟踪数据集对meanshift跟踪效果进行了分析。 目 录 一.实验名称 二.实验目的 三.实验原理 3.1 前言 3.2 meanshift …

传统目标跟踪——MeanShift算法

目录 一、均值漂移(MeanShift) 二、流程 三、代码 3.1 meanshift+固定框的代码 3.2 优化:meanshift鼠标选择 3.3 meanshift自己实现函数 四、补充知识 4.1 直方图 4.2 归一化 4.3 直方图反投影 一、均值漂移(…

Mean Shift 聚类算法

原文:https://blog.csdn.net/hjimce/article/details/45718593 一、mean shift 算法理论 Mean shift 算法是基于核密度估计的爬山算法,可用于聚类、图像分割、跟踪等,因为最近搞一个项目,涉及到这个算法的图像聚类实现&#xff…

mean shift聚类matlab,机器学习:Mean Shift聚类算法

今天的文章介绍如何利用Mean Shift算法的基本形式对数据进行聚类操作。而有关Mean Shift算法加入核函数计算漂移向量部分的内容将不在本文讲述范围内。实际上除了聚类,Mean Shift算法还能用于计算机视觉等场合,有关该算法的理论知识请参考这篇文章。 Mea…

Python 实现MeanShift算法

原理 大家自行百度吧,我懒得码字了 推荐一下原理原理https://blog.csdn.net/jinshengtao/article/details/30258833 代码 直接上代码了,看不懂,就参照一下原理 # author: wdq # contact: 1920132572qq.com # datetime:2022/3/15 17:40 # …

Sklearn聚类算法之meanshift

以二维来说明可能更容易理解,下图中的很多的红点就是我们的样本特征点,meanshift就是在这些点中的任意一个点为圆心,然后以半径R画一个圆(在opencv中是一个矩形),然后落在这个圆中的所有点和圆心都会对应的…

Python实现Mean Shift聚类算法

Mean Shift算法,又称均值聚类算法,聚类中心是通过在给定区域中的样本均值确定的,通过不断更新聚类中心,直到聚类中心不再改变为止,在聚类、图像平滑、分割和视频跟踪等方面有广泛的运用。 Mean Shift向量 对于给定的…

mean shift 跟踪算法

说明一: Mean Shift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束. 1. Meanshift推导 给定d维空间Rd的n个样本点 ,i1,…,n,在空间中任选一点x,那么Mean Shift向量…

Python实现Mean Shift算法

声明:代码的运行环境为Python3。Python3与Python2在一些细节上会有所不同,希望广大读者注意。本博客以代码为主,代码中会有详细的注释。相关文章将会发布在我的个人博客专栏《Python从入门到深度学习》,欢迎大家关注~ 在K-Means算…

meanshift算法 java_Meanshift,聚类算法

记得刚读研究生的时候,学习的第一个算法就是meanshift算法,所以一直记忆犹新,今天和大家分享一下Meanshift算法,如有错误,请在线交流。 Mean Shift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其…

保边滤波之Mean shift filter

Mean shift filter 目录 Mean shift filter 一、算法原理 二、练手实现的算法代码如下: 三、实现结果 一、算法原理 在OpenCV中,meanshift filter函数为 pyrMeanShiftFiltering, 它的函数调用格式如下: C: void pyrMeanShif…

mean shift

参考: http://blog.csdn.net/google19890102/article/details/51030884 http://www.cvvision.cn/5778.html https://wenku.baidu.com/view/5862334827d3240c8447ef40.html http://blog.csdn.net/qq_23968185/article/details/51804574 https://www.cnblogs.com…

机器学习算法原理与实践(二)、meanshift算法图解以及在图像聚类、目标跟踪中的应用

【原创】Liu_LongPo 转载请注明出处 【CSDN】http://blog.csdn.net/llp1992 最近在关注跟踪这一块的算法,对于meanshift的了解也是来自论文和博客,本博客将对meanshift算法进行总结,包括meanshift算法原理以及公式推导,图解&…

基于MeanShift的目标跟踪算法及实现

这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法【matlab/c两个版本】 csdn贴公式比较烦,原谅我直接截图了… 一、简介 首先扯扯无参密度估计理论&#xff0c…

聚类算法:Mean Shift

目录 简介 mean shift 算法理论 Mean Shift算法原理 算法步骤 算法实现 其他 聚类算法之Mean Shift Mean Shift算法理论 Mean Shift向量 核函数 引入核函数的Mean Shift向量 聚类动画演示 Mean Shift的代码实现 算法的Python实现 scikit-learn MeanShift演示 s…

meanshift算法通俗讲解

这几天学习《学习OpenCV》中的第十章运动跟踪,里面讲到了meanshift算法,根据书上所讲实在难以理解,meanshift在运动跟踪这个过程中到底起到什么作用,于是经过几天不断地看相关资料和别人的博客文章,慢慢思路清晰了&…

机器学习实验 - MeanShift聚类

目录 一、报告摘要1.1 实验要求1.2 实验思路1.3 实验结论 二、实验内容2.1 方法介绍2.2 实验细节2.2.1 实验环境2.2.2 实验过程2.2.3 实验与理论内容的不同点 2.3 实验数据介绍2.4 评价指标介绍2.5 实验结果分析 三、总结及问题说明四、参考文献附录:实验代码 报告内…

聚类 之 MeanShift

文章目录 Meanshift 聚类基本原理Meanshift 聚类流程简述实例演示MeanShift聚类简易应用示例总结拓展阅读 上篇博客介绍了基于距离的K-Means聚类,这次给大家推荐一个基于密度的聚类算法:Meanshift(均值漂移)。 Meanshift 聚类基本…

Muduo源码剖析

1、总体流程 1. acceptor 进行listen阶段后, 往channel中注册可读事件。 2. acceptor可读处理中生成TcpConnection指针,通过EventloopThreadPool 轮询出其中一个线程的eventloop, 并将此TcpConnection的可读、可写等事件注册到自己Channel(ev…

Muduo - Reactor模式

Muduo - Reactor模式 一、Reactor 是什么 wiki的中文定义:Reactor模式是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handler,这个Service Handler会同步的将输入的请求(Even…