聚类算法之Mean Shift
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)=k1xi∈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πh1e−2h2(x1−x2)2
其中,hhh称为带宽bandwidth
,即高维球区域ShS_hSh的半径,不同带宽的核函数如下所示:
从图像可以看出,当带宽hhh一定时,样本点之间的距离越近,其核函数的值越大;当样本点之间的距离相等时,随着高斯核函数的带宽hhh的增大,核函数的值在减小
4. Mean Shift
聚类流程
在未被标记的数据点中随机选择一个点作为中心
center
;找出离
center
距离在bandwidth
之内的所有点,记做集合MMM,认为这些点属于簇ccc。同时,把这些求内点属于这个类的概率加1,这个参数将用于最后步骤的分类以
center
为中心点,计算从center
开始到集合MMM中每个元素的向量,将这些向量相加,得到向量shift
center = center+shift
。即center
沿着shift
的方向移动,移动距离是||shift||
重复步骤2、3、4,直到
shift
的大小很小(就是迭代到收敛),记住此时的center
。注意,这个迭代过程中遇到的点都应该归类到簇ccc。如果收敛时当前簇ccc的
center
与其它已经存在的簇c2c_2c2中心的距离小于阈值,那么把c2c_2c2和ccc合并。否则,把c作为新的聚类,增加1类。重复1、2、3、4、5, 6直到所有的点都被标记访问
分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。
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相关推荐
- 机器学习(十)Mean Shift 聚类算法
Mean Shift 聚类算法 原文地址:http://blog.csdn.net/hjimce/article/details/45718593 作者:hjimce 一.mean shift 算法 ...
- 【机器学习】聚类算法DBSCAN、K-means、Mean Shift对比分析及具体代码实现
[机器学习]聚类算法DBSCAN.K-means.Mean Shift对比分析及具体代码实现 一.DBSCAN算法(具有噪声的基于密度的聚类方法) 1.算法原理 基于数据分布密度不同对数据进行聚类,把 ...
- 均值漂移(mean shift )聚类算法Matlab实现详解
Mean shift 算法是基于核密度估计的爬山算法,可用于聚类.图像分割.跟踪等,其在声呐图像数据处理也有广泛的应用,笔者在网上找了一遍也没有找到关于Mean shift的matlab实现代码,找到 ...
- 【聚类算法】常见聚类算法总结
转自:https://blog.csdn.net/u010062386/article/details/82499777 感谢博主 1.常见算法 1.原型聚类 "原型"是指样本空间 ...
- a*算法的优缺点_五种聚类算法一览与python实现
大家晚上好,我是阿涛. 今天的主题是聚类算法,小结一下,也算是炒冷饭了,好久不用真忘了. 小目录: 1.K-means聚类2.Mean-Shift聚类3.Dbscan聚类4.层次聚类5.GMM_EM聚 ...
- [Python从零到壹] 十三.机器学习之聚类算法四万字总结全网首发(K-Means、BIRCH、树状聚类、MeanShift)
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 机器学习7—聚类算法之K-means算法
K-均值算法(K-means) 前言 聚类算法模型 常见的聚类算法 一.K-means算法描述 二.示例说明K-means算法流程 三.K-means算法中Kmean()函数说明 四.K-means算 ...
- 五种常见的聚类算法总结
目录 一.关于聚类的基础描述 1.1 聚类与分类的区别 1.2 聚类的概念 1.3 聚类的步骤 二.几种常见的聚类算法 2.1 K-means聚类算法 1) K-means算法的流程: 2)K- ...
- 【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)
需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.聚类任务 设样本集S={x_1,x_2,-,x_m}包含m个未标记样本,样本x_i=(x_i^(1),x_i^(2),-,x_i^(n))是一 ...
- 聚类算法_层次聚类_密度聚类(dbscan,meanshift)_划分聚类(Kmeans)详解
注: 两整天的成果,谬误之处勿喷 1 聚类概述 样本 没有训练的样本 没有标注的样本 1.1 相似度度量 1.1.1 距离相似度度量 距离度量 dist(oi,oj)dist(o_{i},o_{j}) ...
最新文章
- 2003網域升級到2008網域以及遷移DNS
- 新版直播其他问题QA
- 2008年毕业生第一份工作月薪工资大曝光
- java垃圾回收机制(简述)
- JavaFX之TableView
- python回声程序 一行代码_python实现的比较完成的带声音的摩斯码翻译程序的代码...
- 脑洞大开!20幅漫画告诉你未来世界是怎样的
- access 报表中序号自动_Access中自动编号的字段ID如何让它重新从初始值1开始编号...
- 菜鸟学Struts2——Interceptors
- BGP的同步规则分析
- bzoj4695 最假女选手(势能线段树/吉司机线段树)题解
- 关于移动端设备适配的问题
- switchhost提示没有切换权限
- 从零搭建Pytorch模型教程(一)数据读取
- 百度高德地图收费5万?
- 从无序到有序的负熵力量
- 利用马尔可夫模型分析游戏装备强化概率问题
- 动态规划(Dynamic Programming)
- 工控机安装服务器系统,工控机驱动安装步骤及流程说明
- 利用jmap查看一个class声称的实例个数