当前位置: 首页 > article >正文

机器学习/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 np

X = 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.kler.cn/a/145638.html

相关文章:

  • 人工智能之深度学习_[4]-神经网络入门
  • MyBatis和JPA区别详解
  • 大华大数据开发面试题及参考答案
  • Kotlin语言的数据结构
  • 数据结构-队列
  • Windows FileZila Server共享电脑文件夹 映射21端口外网连接
  • SkyWalking全景解析:从原理到实现的分布式追踪之旅
  • DY点赞、搜索功能测试用例设计
  • 【刷题笔记】接雨水||暴力通过||符合思维方式
  • JC/T 456-2015 陶瓷马赛克检测
  • 【单调栈】子数组的最小值之和
  • Presto+Alluxio数据平台实战
  • IDM(Internet Download Manager)PC版提升下载速度与效率的利器
  • uniapp+vue基于Android的校园二手跳蚤市场的设计与实现 微信小程序
  • 18.天气小案例
  • 电子学会C/C++编程等级考试2021年06月(三级)真题解析
  • SELinux零知识学习三十、SELinux策略语言之角色和用户(1)
  • 常见遍历方法 for循环、forEach、map、filter、find、findIndex、some、every
  • 1 Python实现23种计模式
  • qt双击treeview节点之后,完成编辑,获取完成编辑得信号
  • C++变量、函数、类的声明和定义
  • leetCode 1080.根到叶路径上的不足节点 + 递归 + 图解
  • LeetCode Hot100 105.从前序与中序遍历序列构造二叉树
  • 鸿蒙(HarmonyOS)应用开发——基础语法例子
  • Vuejs+ElementUI搭建后台管理系统框架
  • 我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)