c2c代表网站有哪些,网络营销推广工具有哪些,网红营销策略分析,汽车技术资料网站建设文章目录 前言一、原理前置知识点Mean Shift计算步骤 二、应用举例-图像分割三、聚类实战-简单实例bandwidth1bandwidth2总结 前言
Mean Shift#xff08;均值漂移#xff09;是基于密度的非参数聚类算法#xff0c;其算法思想是假设不同簇类的数据集符合不同的概率密度分布… 文章目录 前言一、原理前置知识点Mean Shift计算步骤 二、应用举例-图像分割三、聚类实战-简单实例bandwidth1bandwidth2总结 前言
Mean Shift均值漂移是基于密度的非参数聚类算法其算法思想是假设不同簇类的数据集符合不同的概率密度分布找到任一样本点密度增大的最快方向最快方向的含义就是Mean Shift样本密度高的区域对应于该分布的最大值这些样本点最终会在局部密度最大值收敛且收敛到相同局部最大值的点被认为是同一簇类的成员。
Mean Shift在计算机视觉领域的应用非常广如图像分割聚类和视频跟踪等。
一、原理
前置知识点
核密度估计 Mean-shift的核心思想是通过估计数据点分布的概率密度函数来发现数据集的聚类结构。它使用核函数通常是高斯核函数来对每个数据点的周围区域进行加权得到一个局部密度估计。 对于每一个数据点 x i x_i xi其邻域内点密度计算公式如下 其中K是高斯核函数h是带宽参数n是数据集的大小d是数据点的维数 下图是一维数据集的核概率密度其中虚线表示每个样本的核函数实线是每个样本的核函数进行叠加表示数据集的概率密度。该数据集的概率密度只有一个局部最大值因此此时mean shift算法的簇类个数是1。 梯度上升 在密度估计的基础上Mean-shift算法通过对密度梯度进行上升来寻找数据点的模态或聚类中心。梯度上升的过程可看作在概率密度函数表面上向着密度增长最快的方向移动。 ps 数据集密度函数如下 对数据集密度函数求导 其中 g ( s ) − k ′ ( s ) g(s)-k(s) g(s)−k′(s) 迭代过程 算法通过不断迭代的方式更新每个数据点的位置直到收敛到一个局部极值点。具体而言对于每个数据点通过计算其周围区域内的梯度方向将点沿梯度方向移动一定的步长。这个步长通常由算法自适应确定。 ps: 公式2的第一项为实数值因此第二项的向量方向与梯度方向一致得到均值漂移向量均值漂移向量所指的方向是密度增加最大的方向 收敛条件 迭代过程的收敛条件通常是梯度变为零或变得足够小。当梯度接近零时说明数据点已经移动到密度估计的峰值位置此时算法认为达到了聚类中心。 聚类结果 最终所有数据点都会收敛到密度估计的峰值位置形成聚类。如果多个数据点收敛到相同的峰值它们被认为属于同一个聚类。
Mean Shift计算步骤
1计算每个样本的均值漂移向量 m h ( x i ) m_h(x_i) mh(xi)2对每个样本进行平移 x i x i m h ( x i ) x_ix_im_h(x_i) xiximh(xi)3重复步骤12直到样本点收敛即 m h ( x i ) 0 m_h(x_i)0 mh(xi)04收敛到相同点的样本被认为是同一簇类的成员
二、应用举例-图像分割
对下图进行图像分割 将数据映射到RGB三维空间 运行mean shift算法使用带宽为25的高斯核下图展示了每个样本收敛到局部最大核密度的过程 每个样本点最终会移动到核概率密度的峰值移动到相同峰值的样本点属于同一种颜色图像分割结果如下图所示 三、聚类实战-简单实例
from sklearn.cluster import MeanShift
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 生成模拟数据
X, _ make_blobs(n_samples300, centers4, cluster_std1.0, random_state42)# 创建Mean Shift模型并拟合数据
bandwidth 1 # 设置带宽需要根据数据特点调整
bin_seeding True # 是否使用直方图种子来初始化均值漂移它可以加快收敛速度,默认True
ms MeanShift(bandwidthbandwidth, bin_seedingbin_seeding)
ms.fit(X)# 获取聚类结果
labels ms.labels_
cluster_centers ms.cluster_centers_# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], clabels, cmapviridis)
plt.scatter(cluster_centers[:, 0], cluster_centers[:, 1,], markero, s100, colorred)
plt.show()重要参数bandwidth需要根据数据特点调整如下所示 ps如果带宽参数过小会导致聚类中心过多如果带宽参数过大会导致聚类中心过少。因此在实际应用中我们需要通过交叉验证等方法来确定带宽参数的取值。 bandwidth1 bandwidth2 总结
优点
不需要设置簇类的个数自动发现潜在的聚类中心对于高维度和非线性分布的数据集也有很好的适应性可以处理任意形状的簇类参数少算法只需设置带宽这一个参数带宽影响数据集的核密度估计算法结果稳定不需要进行类似K均值的样本初始化
缺点
聚类结果取决于带宽的设置带宽设置的太小收敛太慢簇类个数过多带宽设置的太大一些簇类可能会丢失。对于较大的特征空间计算量非常大。