Mean Shift聚类算法

1. 基本原理

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

2. 基本的Mean Shift向量形式

对于给定的ddd维空间RdR^dRd中的nnn个样本点xi,i=1,2,...,nx_i, i=1,2,...,nxi​,i=1,2,...,n,对于空间中的任意点xxx的mean shift向量的基本形式可以表示为:
Mh(x)=1k∑xi∈Sh(xi−x)M_h(x)=\frac {1}{k}\sum_{x_i \in S_h}(x_i-x)Mh​(x)=k1​xi​∈Sh​∑​(xi​−x)
其中,kkk表示的是数据集中的点到xxx小于球半径hhh的数据点的个数,ShS_hSh​是一个半径为hhh的高维球区域,ShS_hSh​的定义为:
Sh(x)=(y∣(y−x)(y−x)T≤h2)S_h(x)=(y|(y-x)(y-x)^T \leq h^2)Sh​(x)=(y∣(y−x)(y−x)T≤h2)

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

3. 改进的Mean Shift向量形式

假设在ShS_hSh​范围内,为了使得每一个样本点xix_ixi​对于样本xxx的贡献不一样,向基本的Mean Shift向量形式中增加核函数,得到如下的改进的Mean Shift向量形式:
Mh(x)=∑xi∈Sh[K(xi−xh)(xi−x)]∑xi∈Sh[K(xi−xh)]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)=∑xi​∈Sh​​[K(hxi​−x​)]∑xi​∈Sh​​[K(hxi​−x​)(xi​−x)]​
其中K(xi−xh)K(\frac {x_i-x} {h})K(hxi​−x​)是高斯核函数,其函数形式如下:
K(x1,x2)=K(x1−x2h)=12πhe−(x1−x2)22h2K(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(hx1​−x2​​)=2π​h1​e−2h2(x1​−x2​)2​
其中,hhh称为带宽bandwidth,即高维球区域ShS_hSh​的半径,不同带宽的核函数如下所示:

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

4. Mean Shift聚类流程

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

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

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

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

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

  6. 如果收敛时当前簇ccc的center与其它已经存在的簇c2c_2c2​中心的距离小于阈值,那么把c2c_2c2​和ccc合并。否则,把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

聚类算法之Mean Shift相关推荐

  1. 机器学习(十)Mean Shift 聚类算法

    Mean Shift 聚类算法 原文地址:http://blog.csdn.net/hjimce/article/details/45718593  作者:hjimce 一.mean shift 算法 ...

  2. 【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现

    [机器学习]聚类算法DBSCAN.K-means.Mean Shift对比分析及具体代码实现 一.DBSCAN算法(具有噪声的基于密度的聚类方法) 1.算法原理 基于数据分布密度不同对数据进行聚类,把 ...

  3. 均值漂移(mean shift )聚类算法Matlab实现详解

    Mean shift 算法是基于核密度估计的爬山算法,可用于聚类.图像分割.跟踪等,其在声呐图像数据处理也有广泛的应用,笔者在网上找了一遍也没有找到关于Mean shift的matlab实现代码,找到 ...

  4. 【聚类算法】常见聚类算法总结

    转自:https://blog.csdn.net/u010062386/article/details/82499777 感谢博主 1.常见算法 1.原型聚类 "原型"是指样本空间 ...

  5. a*算法的优缺点_五种聚类算法一览与python实现

    大家晚上好,我是阿涛. 今天的主题是聚类算法,小结一下,也算是炒冷饭了,好久不用真忘了. 小目录: 1.K-means聚类2.Mean-Shift聚类3.Dbscan聚类4.层次聚类5.GMM_EM聚 ...

  6. [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. 机器学习7—聚类算法之K-means算法

    K-均值算法(K-means) 前言 聚类算法模型 常见的聚类算法 一.K-means算法描述 二.示例说明K-means算法流程 三.K-means算法中Kmean()函数说明 四.K-means算 ...

  8. 五种常见的聚类算法总结

    目录 一.关于聚类的基础描述 1.1  聚类与分类的区别 1.2  聚类的概念 1.3  聚类的步骤 二.几种常见的聚类算法 2.1 K-means聚类算法 1) K-means算法的流程: 2)K- ...

  9. 【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.聚类任务 设样本集S={x_1,x_2,-,x_m}包含m个未标记样本,样本x_i=(x_i^(1),x_i^(2),-,x_i^(n))是一 ...

  10. 聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解

    注: 两整天的成果,谬误之处勿喷 1 聚类概述 样本 没有训练的样本 没有标注的样本 1.1 相似度度量 1.1.1 距离相似度度量 距离度量 dist(oi,oj)dist(o_{i},o_{j}) ...

最新文章

  1. 2003網域升級到2008網域以及遷移DNS
  2. 新版直播其他问题QA
  3. 2008年毕业生第一份工作月薪工资大曝光
  4. java垃圾回收机制(简述)
  5. JavaFX之TableView
  6. python回声程序 一行代码_python实现的比较完成的带声音的摩斯码翻译程序的代码...
  7. 脑洞大开!20幅漫画告诉你未来世界是怎样的
  8. access 报表中序号自动_Access中自动编号的字段ID如何让它重新从初始值1开始编号...
  9. 菜鸟学Struts2——Interceptors
  10. BGP的同步规则分析
  11. bzoj4695 最假女选手(势能线段树/吉司机线段树)题解
  12. 关于移动端设备适配的问题
  13. switchhost提示没有切换权限
  14. 从零搭建Pytorch模型教程(一)数据读取
  15. 百度高德地图收费5万?
  16. 从无序到有序的负熵力量
  17. 利用马尔可夫模型分析游戏装备强化概率问题
  18. 动态规划(Dynamic Programming)
  19. 工控机安装服务器系统,工控机驱动安装步骤及流程说明
  20. 利用jmap查看一个class声称的实例个数

热门文章

  1. SeaWeedFS文件存储服务器搭建
  2. 《畅玩NAS》第3章 ESXI安装OpenMediaVault
  3. 有权图的单源最短路算法
  4. 《Unity shader入门精要》阅读笔记
  5. PHP字符串函数 查找字符位置函数
  6. JS五彩连珠小游戏(Canvas绘制)
  7. html把圆形分成10份,CSS八等分圆的实现示例
  8. The Tao of Programing-编程之道
  9. i7 9750h和i7 8750h参数对比差多少
  10. windows10安装NVIDIA显卡驱动+cuda10.0教程