机器学习/sklearn笔记:MeanShift

1 算法介绍

  • 一种基于质心的算法
  • 通过更新候选质心使其成为给定区域内点的均值
  • 候选质心的位置是通过一种称为“爬山”技术迭代调整的,该技术找到估计的概率密度的局部最大值

1.1 基本形式

  • 给定d维空间的n个数据点集X,那么对于空间中的任意点x的均值漂移向量基本形式可以表示为:
    • M_h=\frac{1}{K} \sum_{x \in S_k} (x_i-x)
    • 其中Sk表示数据集的点到x的距离小于球半径h的数据点
  • 漂移过程就类似于”梯度下降“
    • 通过计算漂移向量,然后把球圆心x的位置更新一下
    • x=x+M_h
    • 求解一个向量,使得圆心一直往数据集密度最大的方向移动(每次迭代找到圆里面的平均位置作为新的圆心位置)

1.2 加入核函数的漂移向量

  • 引入核函数可以知道数据集的密度,梯度是函数增加最快的方向
  • 这里的核函数为
  • 对每个点的核函数求微分,有:
    • g(x)=-k'(x)
    • 第二个中括号前面的是实数值
    • 第二项的向量方向与梯度方向一致
  • 所以令加入核函数后的偏移向量为:
    • 继续x=x+M_h

1.3 聚类流程

假设在一个多维空间中有很多数据点需要进行聚类,Mean Shift的过程如下:

  1. 在未被标记的数据点中随机选择一个点作为中心center;
  2. 找出离center距离在bandwidth之内的所有点,记做集合M,认为这些点属于簇c
    1. 同时,把这些求内点属于这个类的频率加1,这个参数将用于最后步骤的分类
  3. 以center为中心点,计算从center开始到集合M中每个元素的向量,将这些向量相加,得到向量shift 【如果是带核函数的均值漂移,那么m(x)有额外的计算方式】
  4. center = center+shift。即center沿着shift的方向移动,移动距离是||shift||
  5. 重复步骤2、3、4,直到shift的大小很小(就是迭代到收敛),记住此时的center
    1. 这个迭代过程中遇到的点都应该归类到簇c
    2. 如果收敛时当前簇c的center与其它已经存在的簇c2中心的距离小于阈值,那么把c2和c合并。否则,把c作为新的聚类,增加1类
  6. 重复1、2、3、4、5直到所有的点都被标记访问。
  7. 分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。

对新样本进行标记是通过找到给定样本的最近质心来执行的。

2 sklearn 实现

2.1 基本使用方法

class sklearn.cluster.MeanShift(*, bandwidth=None, seeds=None, bin_seeding=False, min_bin_freq=1, cluster_all=True, n_jobs=None, max_iter=300)

2.2 主要参数

bandwidth搜寻圆的大小
seeds用于初始化核的种子
cluster_all

如果为true,则所有点都被聚类,即使是那些不在任何核内的孤儿点也一样。孤儿被分配到最近的核。

如果为false,则孤儿的聚类标签为-1

2.3 举例

from sklearn.cluster import MeanShift
import numpy as npX = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])ms=MeanShift(bandwidth=1).fit(X)ms.cluster_centers_
'''
array([[10.,  4.],[10.,  2.],[10.,  0.],[ 1.,  4.],[ 1.,  2.],[ 1.,  0.]])
'''ms.labels_
#array([4, 3, 5, 1, 0, 2], dtype=int64)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#,《小白学程序》第一课:初识程序,变量,数据与显示

曰:扫地僧练就绝世武功的目的是为了扫地更干净。 1 引言 编程只是一项技术,如包包子,不是什么高深的科学。 学习程序最不好的方法是先学习枯燥的语法。 学习程序主要是用代码解决问题。因此,我们抛开所有的语法与诸多废物&…

React项目中发生空白但不报错的原因分析和解决?

文章目录 前言组件渲染问题状态管理问题异步操作问题代码错误但未抛出异常如果我们使用的是chorme浏览器的话,可以下载一个开发者工具,例如下图:代码审查使用调试工具日志和输出检查外部依赖异步操作终极大法,不到万不得已不可以使…

python+gurobi求解线性规划、整数规划、0-1规划

文章目录 简单回顾线性规划LP整数规划IP0-1规划 简单回顾 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约束的,变量范围为有理数的线性规划。如: 使用matlab的linprog函数即可求解简单的线性规划问题,可以参…

【Python 训练营】N_6 求素数

题目 判断101-200之间有多少个素数,并输出所有素数。 分析 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 答案 h 0 leap 1 from math import sqrt from sys …

2023亚太地区数学建模C题思路模型代码论文

C题的参考思路: 1,问题1的思路: 确定研究问题的主要指标体系(新能源电车的售出数量、安全性指标、充电桩数目、电池续 航里程等),收集指标的对应数据,检验数据是否服从正态性: 若服从正态分布: 0,可考虑优先采用“多元方差分析”模…

Python推导式

python推导式是一种独特的数据处理方式,可以从一个数据序列构建到另一个新的数据序列的结构体。 Python支持各种数据结构的推导式: 1. 列表(list)推导式 [表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] or …

【​用运算放大器设计恒流电流源电压4V-74V适应范围 ​】2021-11-29

缘由用运算放大器设计恒流电流源-编程语言-CSDN问答直流恒流源设计,要求用到运算放大器-硬件开发-CSDN问答求助恒流驱动电路,运放端口电压的问题? - 电路设计论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!(不能实现恒流坏的电路设计反面例子…

OpenCV快速入门:特征点检测与匹配

文章目录 前言一、角点检测1.1 角点特征1.1.1 角点特征概念1.1.2 角点的特点1.1.3 关键点绘制代码实现1.1.4 函数解析 1.2 Harris角点检测1.2.1 Harris角点检测原理1.2.2 Harris角点检测公式1.2.3 代码实现1.2.4 函数解析 1.3 Shi-Tomasi角点检测1.3.1 Shi-Tomasi角点检测原理1…

GIT,解决远程分支冲突

背景:当远程分支A 与maste 有冲突如何解决–此时无法在这两个版本之间merge 1、切换到master分支: git checkout master 2、更新master分支代码: git pull 3、再次切换到自己新建的分支: git checkout add_login_check_func 4、将…

SuperMap iDesktopX如何获取简单线的起终端点及坐标

作者:超图研究院技术支持中心-于丁 SuperMap iDesktopX如何获取简单线的起终端点及坐标 在GIS行业应用中,线数据的端点坐标有非常多的用处。 定位和可视化:线数据端点坐标可以用于定位和可视化线要素在空间中的位置。这对于地图制作、规划和…

初识Linux(1),看了这篇文章,妈妈再也不用担心我Linux找不到门了。

文章目录 前言1. ls 指令例如:只显示文件名属性ls显示文件详细属性 ls - l 该操作可以简写成ll查看隐藏文件ls -l -a 2.pwd例如:显示当前目录所处的路径类似于windows如下操作: 3.cd 指令例如:改变工作目录相当于windows如下操作 4.whoami 指…

html幸运大转盘抽奖(附源码)

文章目录 1.设计来源1.1 幸运大转盘 风格11.2 幸运大转盘 风格21.3 幸运大转盘 风格31.4 幸运大转盘 奖品效果1.5 幸运大转盘 活动未开始1.6 幸运大转盘 活动已结束1.7 幸运大转盘 图片源素材 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址&a…

Windows power shell for循环

有时候需要重复执行某个shell命令 for($i1;$i -lt 10;$i$i1){echo $i}如果是cmd for /l %i in (1,1,5) do echo %i

vue 使用vuex中的data数据引用问题

先上代码: this.userRoleInfo2 this.$store.state.userInfo this.userRoleInfo2.name 111 this.userRoleInfo2.orgName 222 this.userRoleInfo2.orgId 4444问题描述: 博主,定义了一个变量userRoleInfo2来接收了 从vuex中获取了userInfo…

卷积神经网络(Inception V3)识别手语

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建Inception V3网络模型1.自己搭建2.官方模型 五、编译六、训练模型七、模型…

再生式收音机踩坑记

下载《A Simple Regen Radio for Beginners》这篇文章也有好几年了,一直没有动手,上周末抽空做了一个,结果相当令人沮丧,一个台也收不到,用示波器测量三极管振荡波形,只有在调节再生电位器R2过程中&#xf…

什么是合封芯片工艺,合封芯片工艺工作原理、应用场景、技术要点

芯片封装技术不断进步,其中合封芯片工艺作为一种先进的芯片封装技术,“超”广泛应用于各类电子设备中。 本文将从合封芯片工艺的工作原理、应用场景、技术要点等方面进行深入解读。 一、合封芯片工艺 合封芯片工艺是一种将多个芯片或不同的功能的电子模…

构造命题公式的真值表

构造命题公式的真值表 1:实验类型:验证性2:实验目的:3:逻辑联结词的定义方法4:命题公式的表示方法5:【实验内容】 1:实验类型:验证性 2:实验目的&#xff1a…

数据黑洞,正在悄悄吞噬你的门店业绩

互联网兴起以来,线下门店的数字化程度始终落后于线上。一个重要的原因是:线下信息不像线上那样简单、集中、易于统计。很多重要数据隐藏于「黑洞」之中,收集和分析成本极为高昂。这极大束缚了门店业绩的提升。 而反过来看,线下场景…

C++(20):通过source_location实现日志函数

C++20中引入了std::source_location,用来描述函数调用的上下文信息。 其主要的成员函数如下: line():获取行号。column():获取列号。file_name():获取文件名。function_name():获取函数域名。#include <iostream> #include <string_view> #include <sour…