参考:
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/liqizhou/archive/2012/05/12/2497220.html
https://www.zhihu.com/question/27301358
https://www.zybang.com/question/3797fbcae06ac70f5071ff1ee42f23e2.html

1 mean shift 原始形式

mean shift介绍

mean shift是一种聚类算法,又称为均值漂移算法,在聚类,图像平滑、分割以及视频跟踪等方面有广泛的应用。Mean Shift的概念最早是由Fukunage在1975年提出的。

mean shift原始形式

原始形式为(1),其中x表示高维球形的球心,xi表示各个向量点,K表示落在高维球形中的向量点的个数。这个向量就是漂移向量,其中Sk指的是一个半径为h的高维球区域。也就是:。从公式(1)中也可以看出,原始的mean shift不过就是对球心内所有向量进行了合成,因为我们知道,最终的mean shift向量就是这些下图用黑线表示向量的和。就像力的合成一样,合力的方向由所有力的方向共同决定。
当我们求得Mh(x)以后,我们即对x进行更新(2),从而得到一个新的球心。在这个过程中,球心会一直向数据点集中的地方移动,换句话说球心会朝着数据集密度最大的方向移动。如此反复,最终球心x会收敛到一个固定值。

原始形式伪代码

该过程的伪代码可以表达成下面几句话,给大家一个整体认识该算法的角度。总得来说,该算法以每一个样本点作为窗口的中心点,再寻得最终中心点,最终中心点相同的样本点就是同一类。
重复移动直至收敛{
对每一个数据点,固定一个窗口(数据范围):
计算窗口内数据的中心;
移动窗口至新的中心

用图像解释mean shift过程

我们用二维图像上的点来解释上面的过程。

首先我们选定初始点为蓝色点(圆心),然后定义h的长度,我们发现一旦h定义完毕之后,那么蓝色的圆也就确定了,我们利用公式(1)计算Mh(x)并利用此来更新圆心x,得到新的圆心即黑色点,然后以黑色点为圆心,h为半径确定一个新的圆,再利用公式(1)求Mh,……如此往复,最终圆心x会收敛在一个固定的值,也就是概率密度最大的地方。更多的图像来形象地表达上述文字,如下。
黄色箭头即为平均的偏移向量Mh(x),指向样本分布最多的区域,也就是概率密度函数的梯度方向。
(1)初始化一个圆心蓝色点和h,计算出Mh(x)

(2)利用进行更新,形象地看就是蓝色点在黄色箭头方向上移动到了黄色点。

(3)将黄色点作为新的圆心,计算出新的Mh(x),并更新圆心。

(4)如(3)同样的处理。

(5)最终圆心收敛到黄色点。

mean shift的基本思想就讲解完毕了。

时间复杂度

n 是样本点数, T 是迭代次数. 一般mean shift 在计算时间上开销很大,时间复杂度为,O(Tn^2)。

原始形式的不足

这样的一种原始形式的Mean Shift形式存在一个问题:在上面Mean Shift向量的计算过程中我们并没有考虑距离因素,即只要两个采样点在均值向量方向上的投影相等,则它们对Mean Shift向量计算的贡献就一样。从公式(1)我们也会发现,由于K是一个常数,所以每个向量的权重是一样的,即每一个点对圆心x的贡献是一样的。而实际上,这种贡献与x到每一个点xi之间的距离是相关的。

2 预备知识

核函数

核函数也叫窗口函数,在核估计中起到平滑的作用。常用的核函数有:Uniform,Epannechnikov,Gaussian等。下面是wiki上核函数的定义(截图别人的blog,感谢作者)

核密度估计

核密度估计是一种通过非参数估计来估计变量的概率密度函数的方法,通常也被称为是Parzen窗技术。对于一维的密度函数的核密度估计公式为,扩展到d维下的密度函数的估计用核密度估计时就为,d为x的维数,h是窗口大小。

3 mean shift改进

再后来由Yizong Cheng对其进行扩充,主要提出了两点的改进:
1)定义了核函数;
2)增加了权重系数。
具体地说,核函数的定义使得偏移值对偏移向量的贡献随之样本与被偏移点的距离的不同而不同。权重系数使得不同样本的权重不同。所以Mean Shift中引入kernel的初衷是:随着样本与被偏移点的距离不同,其偏移量对Mean Shift向量的贡献也不同。我们先来看看核函数的定义。

带有核函数的公式

在原始的mean shift加入核函数,meanshift算法变为(3.1),其中参数的意思为K()表示核函数,h为半径,为单位密度,如果想(3.1)中的f得到最大值,我们可想到的方法就是对公式(3.1)求导。得到(3.2)
令g(x) = - k’(x);k(x)叫做g(x)的影子核,名字听上去听深奥的,也就是求导的负方向,那么上式可以表为
(3.3)
公式(3.3)中的第二项为meanshift向量,即;要使得公式(3.3)为0,当且仅当,此时求出新的中心点坐标为(3.4)

meanshift算法流程

  1. 选择空间中x为圆心,以h为半径为半径,做一个高维球,落在所有球内的所有点xi
  2. 计算,如果<ε(人工设定),推出程序。如果>ε, 则利用(3.4)计算x,返回1.

mean shift相关推荐

  1. 机器学习中的聚类算法(2):Mean Shift算法

    引言: Mean Shift算法与之前的K-means算法是有共同点的. 1.Mean Shift算法原理 1.1核心思想: 他是一个基于密度的算法.里面有一个值叫半径.需要计算一个漂移向量.刚开始也 ...

  2. 参考WebStorm设置VSCode“转到编辑器中的符号”快捷键为Shift双击(这是一个频繁使用的快捷键)

    搜索workbench.action.gotoSymbol修改key为"shift shift" 这样就比默认的ctrl+shift+O好用了,也不容易误操作成别的快捷键!

  3. 设置WebStorm查看本地源码文件个人修改的历史记录快捷键Alt+Shift+H、Ctrl+Shift+H(通常用于调试bug,发现文件出问题需要回溯到若干天之前)

    Alt+Shift+H 查看整个代码文件的修改历史记录 Ctrl+Shift+H 只查看被选中代码内容的修改历史记录(更具针对性)

  4. webstorm设置git pull快捷键Ctrl+Shift+P

    Ctrl+Shift+P就可以唤起

  5. 设置Fetch快捷键Ctrl+Alt+Shift+1

    在提交代码之前,建议最好先Fetch代码下来(如果有冲突,系统会提示),然后再操作Merge到本地分支,这样做是为了避免有其他人同时修改了当前分支,如果直接用Ctrl+T(pull代码)极有可能覆盖本 ...

  6. 设置Open in Terminal快捷键Alt+Shift+Z,方便angular项目的各种命令输入(多任务状态下)

    Ctrl+Shift+S

  7. 【实用】几个实用的webstorm、IDEA编辑器窗口快捷键设置,Alt+V垂直复制当前窗口,Alt+Shift+V将当前窗口复制到另一边的分割窗口显示,Alt+Shift+M移动当前活动窗口到另一边

    Alt+V垂直复制当前窗口 Alt+Shift+V将当前窗口复制到另一边的分割窗口显示,Alt+Shift+M移动当前活动窗口到另一边

  8. 【Qt】在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效的解决方法

    1.问题描述 Win10操作系统环境下,在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效. 2.原因分析 Ctrl+Shift+f快捷键在各种输入法中,常用来做中文简体和繁 ...

  9. ES5-Array-push(),pop(),shift(),unshift()

    参考文章:push(),pop() push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度. 注意,该方法会改变原数组,而不是创建一个新的数组. var arr = [];arr ...

  10. JS Array 中 shift 和 pop 的妙用

    在 JS Array 中支持两个方法,shift() 和 pop(),分别是指从一个数据中的最前面和最后面删除一个值,并返删除值.看一个示例就明白了:     var arr = ['s','o',' ...

最新文章

  1. ssh密钥分发与ansible
  2. jenkins日志乱码linux,Jenkins控制台中乱码问题解决
  3. 在连续发布版本的情况下 如何做好测试?
  4. 产品经理教你玩转阿里云负载均衡SLB系列(一):快速入门--什么是负载均衡
  5. sklearn的train_test_split
  6. 深入学习Java多线程——并发机制底层实现原理
  7. 微信小程序隐藏菜单栏目下转发按钮的几个方法
  8. Linux命令笔记(一)
  9. android菜单详解二:选项菜单
  10. 已潜伏17年!严重的“可蠕虫”系统漏洞影响所有Windows Server
  11. 算法导论的道与术、工程师思维奠定能走多远
  12. silverlight读取mysql_silverlight访问数据库
  13. multicast msdp 1
  14. 【笔试题目整理】 网易2018校园招聘数据分析工程师笔试卷
  15. mysql查询语句是什么意思_mysql子条件查询语句是什么意思?
  16. Mac版DBeaver调整编辑窗口字体大小
  17. 塔菲尔曲线如何分析_Tafel曲线是做什么的
  18. python文件操作入门
  19. Nett源码剖析(2)NioEventloopGroup的创建2021SC@SDUSC
  20. SQL Server数据库实操 第四波 视图、索引

热门文章

  1. 2021-1-31linux学习纪要
  2. c语言自动化课题设计,自动化专业C语言程序设计课堂教学方案设计和实践.doc
  3. python连续小波变换_连续小波变换CWT(2)
  4. java 先进先出 集合_Java中的集合Queue、LinkedList、PriorityQueue(四)
  5. Vagrant:将装在C盘的虚拟机移动到别的目录
  6. Vue3:集成wangEditor富文本编辑器
  7. SQL:pgsql查询geom参考系以及更改geom参考系
  8. layUI:垂直导航栏点击某个导航时关闭其他已开启导航
  9. CUDA实现QuickSortr排序算法(一)
  10. 关于string中的如果使用变量的笔记