一、 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的模,R表示实数域,如果一个函数K:X→R存在一个剖面函数
,即
并且满足:
- k是非负的
- k是非增的
- k是分段连续的
那么,函数K(x)就称为核函数。
常用的核函数
线性核:
多项式核: ,
为多项式次数
高斯核: ,
为高斯核的带宽
拉普拉斯核:
Sigmoid核: ,tanh为双曲正切函数,
在这里我们使用高斯核函数,将他写成下面的形式:
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)