Mean Shift 算法原理及 Python 实现

Mean Shift算法是一种无需指定类别数量的聚类方法,适用于聚类个数未知的情况。它通过不断更新聚类中心直至稳定,基于高斯核函数计算样本的偏移均值。本文介绍了算法原理,包括核函数、基本原理和算法流程,并展示了实践结果。
摘要由CSDN通过智能技术生成

 一、 Mean Shift 算法

 K-Means 算法最终的聚类效果受初始的聚类中心的影响,K-Means++ 算法未选择较好的初始聚类中心提供了依据,但在 K-Means 算法中,聚类的类别个数 k 仍需要事先指定。对于类别个数未知的, K-Means 算法和 K-Means++ 算法很难将其进行精确求解。 Mean Shift 算法被提出用于解决聚类个数未知的情况。

 Mean Shift 算法又称均值漂移算法,是基于聚类中心的聚类算法。实现不需要指定类别个数k,聚类中心是通过在给定区域中的均值来确定的,通过不断更新聚类中心,直到最终的聚类中心不再改变。 Mean Shift 算法在聚类、图像平滑、分割和视频跟踪等方面有广泛的应用。

二、 Mean Shift 算法的原理

1.核函数

Mean Shift算法中引入核函数的目的是使得随着样本与被偏移点的距离不同,其偏移量对均值偏移向量的贡献也不同

核函数的定义

X表示一个d维的欧式空间,x是该空间中的一个点x={x1,x2,x3⋯,xd},其中,x的模\left \| x\right \|^{2}=xx^{T},R表示实数域,如果一个函数K:X→R存在一个剖面函数k:\left [ 0,\infty\right ]\rightarrow R,即
                                                                            K\left ( x\right )=k(\left \| x\right \|^{2})
  并且满足: 

  • k是非负的 
  • k是非增的 
  • k是分段连续的 

  那么,函数K(x)就称为核函数。

常用的核函数

线性核:k(x,y)=x^{T}y

多项式核:k(x,y)=(x^{T}y)^{d}  ,d\geq 1为多项式次数

高斯核:k(x,y)=exp(-\frac{\left \| x-y\right|^{2}}{2\sigma ^{2}})   ,\sigma > 0为高斯核的带宽

拉普拉斯核:k(x,y)=exp(-\frac{\left \| x-y\right|}{\sigma })   

Sigmoid核:k(x,y)=tanh(\beta x^{T}y+\theta )      ,tanh为双曲正切函数,\beta > 0,\theta < 0

在这里我们使用高斯核函数,将他写成下面的形式:

K(\frac{x_{1}-x_{2}}{h})=\frac{1}{\sqrt{2\pi}h}exp(-\frac{(x_{1}-x_{2})^{2}}{2h^{2}})

h为带宽,不同带宽的核函数如下所示:

import matplotlib.pyplot as plt
import math

def cal_Gaussian(x, h=1):
    molecule = x * x
    denominator = 2 * h * h
    left = 1 / (math.sqrt(2 * math.pi) * h)
  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值