【机器学习基础】机器学习入门核心算法:Mini-Batch K-Means算法

article/2025/7/3 23:24:29

在这里插入图片描述

机器学习入门核心算法:Mini-Batch K-Means算法

    • 一、算法逻辑
      • 工作流程
      • 与传统K-Means对比
    • 二、算法原理与数学推导
      • 1. 目标函数
      • 2. Mini-Batch更新规则
      • 3. 学习率衰减机制
      • 4. 伪代码
    • 三、模型评估
      • 1. 内部评估指标
      • 2. 收敛性判断
      • 3. 超参数调优
    • 四、应用案例
      • 1. 图像处理 - 颜色量化
      • 2. 用户分群 - 电商推荐
      • 3. 异常检测 - 网络安全
    • 五、面试题及答案
    • 六、相关论文
    • 七、优缺点对比
    • 总结

一、算法逻辑

Mini-Batch K-Means 是传统K-Means算法的优化版本,专为大规模数据集设计。其核心思想是:每次迭代仅使用数据集的随机子集(mini-batch)来更新聚类中心,而非整个数据集。这种方法在保持聚类质量的同时,显著降低计算复杂度和内存需求。

工作流程

初始化K个聚类中心
随机采样mini-batch
将样本分配到最近中心
更新聚类中心
达到停止条件?
输出聚类结果

与传统K-Means对比

特性传统K-MeansMini-Batch K-Means
数据使用全数据集随机子集(mini-batch)
计算复杂度O(T·n·K·d)O(T·b·K·d)
内存需求高(需加载全数据)低(仅需小批量数据)
收敛速度较慢快3-5倍
适用数据规模中小型数据集大规模数据集(>10^5)

注:T=迭代次数,n=样本数,K=聚类数,d=特征维度,b=批大小

二、算法原理与数学推导

1. 目标函数

同K-Means,最小化簇内平方和(Within-Cluster Sum of Squares, WCSS):
J = ∑ k = 1 K ∑ x ∈ C k ∥ x − μ k ∥ 2 J = \sum_{k=1}^K \sum_{x \in C_k} \|x - \mu_k\|^2 J=k=1KxCkxμk2
其中 μ k \mu_k μk 是簇 C k C_k Ck 的中心。

2. Mini-Batch更新规则

对于每个mini-batch B t B_t Bt

  1. 样本分配:对 x i ∈ B t x_i \in B_t xiBt,计算最近中心:
    c ( t ) ( x i ) = arg ⁡ min ⁡ k ∥ x i − μ k ( t ) ∥ 2 c^{(t)}(x_i) = \arg\min_k \|x_i - \mu_k^{(t)}\|^2 c(t)(xi)=argkminxiμk(t)2

  2. 中心更新:对每个簇 k k k,更新中心为历史分配的加权平均:
    μ k ( t + 1 ) = μ k ( t ) + η t ⋅ ( 1 ∣ C k ∩ B t ∣ ∑ x i ∈ C k ∩ B t x i − μ k ( t ) ) \mu_k^{(t+1)} = \mu_k^{(t)} + \eta_t \cdot \left( \frac{1}{|C_k \cap B_t|} \sum_{x_i \in C_k \cap B_t} x_i - \mu_k^{(t)} \right) μk(t+1)=μk(t)+ηt(CkBt1xiCkBtxiμk(t))
    其中 η t \eta_t ηt 是学习率,通常设置为:
    η t = 1 s k + 1 \eta_t = \frac{1}{s_k + 1} ηt=sk+11
    s k s_k sk 是历史上分配到簇 k k k 的样本总数(随时间累积)

3. 学习率衰减机制

为平衡早期快速收敛和后期稳定性:
s k ← s k + n k ( t ) s_k \leftarrow s_k + n_k^{(t)} sksk+nk(t)
其中 n k ( t ) = ∣ { x i ∈ B t : c ( t ) ( x i ) = k } ∣ n_k^{(t)} = |\{x_i \in B_t : c^{(t)}(x_i) = k\}| nk(t)={xiBt:c(t)(xi)=k}

4. 伪代码

输入: 数据集 X, 聚类数 K, 批大小 b, 最大迭代次数 T
输出: 聚类中心 {μ₁, μ₂, ..., μ_K}
1. 初始化中心 μ_k (随机或K-Means++)
2. 初始化计数器 s_k = 0  for k=1..K
3. for t=1 to T:
4.    随机采样 mini-batch B_t ⊂ X, |B_t|=b
5.    对每个 x_i ∈ B_t:
6.        c(x_i) = argmin_k ||x_i - μ_k||²  // 分配样本
7.    对每个簇 k:
8.        n_k = |{x_i ∈ B_t : c(x_i)=k}|  // 批次中分配数量
9.        if n_k > 0:
10.           v_k = (1/n_k) ∑_{c(x_i)=k} x_i  // 批次均值
11.           s_k = s_k + n_k                 // 更新计数器
12.           μ_k = μ_k + (n_k/s_k)(v_k - μ_k) // 更新中心
13. 返回 {μ_k}

三、模型评估

1. 内部评估指标

  • 轮廓系数(Silhouette Coefficient)
    s ( i ) = b ( i ) − a ( i ) max ⁡ { a ( i ) , b ( i ) } s(i) = \frac{b(i) - a(i)}{\max\{a(i), b(i)\}} s(i)=max{a(i),b(i)}b(i)a(i)
    其中 a ( i ) a(i) a(i) 是样本 i i i 到同簇其他点的平均距离, b ( i ) b(i) b(i) 是到最近其他簇的平均距离。

  • 戴维斯-布尔丁指数(Davies-Bouldin Index)
    D B = 1 K ∑ k = 1 K max ⁡ j ≠ k ( σ k + σ j d ( μ k , μ j ) ) DB = \frac{1}{K}\sum_{k=1}^K \max_{j \neq k} \left( \frac{\sigma_k + \sigma_j}{d(\mu_k,\mu_j)} \right) DB=K1k=1Kj=kmax(d(μk,μj)σk+σj)
    值越小表示聚类效果越好

2. 收敛性判断

  • 相对中心移动量
    Δ = 1 K ∑ k = 1 K ∥ μ k ( t ) − μ k ( t − 1 ) ∥ 2 < ϵ \Delta = \frac{1}{K}\sum_{k=1}^K \|\mu_k^{(t)} - \mu_k^{(t-1)}\|^2 < \epsilon Δ=K1k=1Kμk(t)μk(t1)2<ϵ
    通常 ϵ = 10 − 5 \epsilon = 10^{-5} ϵ=105

3. 超参数调优

参数推荐值影响
批大小 (b) 50 × K 50 \times K 50×K过小→不稳定;过大→速度慢
最大迭代次数100-500根据收敛曲线调整
初始化方法K-Means++显著改善聚类质量

四、应用案例

1. 图像处理 - 颜色量化

任务:将24位真彩图压缩为256色
流程

  1. 将像素RGB值作为特征点( d = 3 d=3 d=3
  2. 使用Mini-Batch K-Means( K = 256 K=256 K=256 b = 10 4 b=10^4 b=104
  3. 将每个像素映射到最近聚类中心
    优势:处理100MP图像仅需10秒(传统K-Means需10分钟)

2. 用户分群 - 电商推荐

场景:为5000万用户分群
特征:RFM(最近购买Recency、频率Frequency、金额Monetary)
实现

  • 聚类数 K = 8 K=8 K=8
  • 批大小 b = 50 , 000 b=50,000 b=50,000
  • 结果:识别出"高价值流失用户"群体,推送定向优惠券
    效果:转化率提升22%

3. 异常检测 - 网络安全

方法

  1. 网络流量特征聚类(IP包数、流量大小、连接频率)
  2. 定义远离所有聚类中心的样本为异常
    优势:实时处理10Gb/s流量数据

五、面试题及答案

1. Q:为什么Mini-Batch K-Means比传统K-Means快?

A:计算复杂度从 O ( T ⋅ n ⋅ K ⋅ d ) O(T·n·K·d) O(TnKd) 降为 O ( T ⋅ b ⋅ K ⋅ d ) O(T·b·K·d) O(TbKd),其中 b ≪ n b \ll n bn。内存仅需加载小批量数据,减少I/O开销。

2. Q:如何选择批大小b?

A:经验公式 b = 50 × K b = 50 \times K b=50×K

  • K = 10 K=10 K=10 b ≈ 500 b≈500 b500
  • K = 100 K=100 K=100 b ≈ 5000 b≈5000 b5000
    需权衡:过小导致更新噪声大,过大失去加速意义。

3. Q:学习率 η t = 1 / ( s k + 1 ) \eta_t = 1/(s_k+1) ηt=1/(sk+1) 的设计原理?

A:这是倒数衰减策略

  • 早期 s k s_k sk 小 → η t \eta_t ηt 大 → 快速逼近中心
  • 后期 s k s_k sk 大 → η t \eta_t ηt 小 → 精细调整
    类似随机梯度下降(SGD)的学习率衰减。

4. Q:何时不适合使用Mini-Batch版本?

A:三种情况:

  1. 数据量小( n < 10 , 000 n<10,000 n<10,000)时加速不明显
  2. 需要精确簇边界(如医学诊断)
  3. 数据分布极度不均衡(小批量可能漏掉稀有类)

六、相关论文

  1. 奠基性论文
    Sculley, D. (2010). Web-Scale K-Means Clustering. Proceedings of the 19th International Conference on World Wide Web.
    贡献:首次提出Mini-Batch K-Means,在Google新闻数据上实现10倍加速

  2. 理论分析
    Bottou, L., & Bengio, Y. (1995). Convergence Properties of the K-Means Algorithms. Advances in Neural Information Processing Systems.
    贡献:证明随机梯度下降在K-Means中的收敛性

  3. 工业优化
    Newling, J., & Fleuret, F. (2016). Fast K-Means with Accurate Bounds. ICML.
    贡献:提出改进的中心更新边界,减少迭代次数30%

七、优缺点对比

优点缺点
计算高效:比传统K-Means快3-10倍解质量略低:WCSS通常高3-5%
内存友好:可处理超大规模数据(>10^9样本)对批大小敏感:需调参
在线学习:支持流式数据逐步更新收敛不稳定:不同运行结果可能差异2-3%
易并行化:batch间相互独立中心初始化敏感:同传统K-Means
实用性强:Spark MLlib等平台原生支持理论保证弱:只能收敛到局部最优

总结

Mini-Batch K-Means 通过随机小批量更新策略,在保持可接受聚类质量的前提下,大幅提升计算效率。其核心价值在于:

  1. 大规模数据处理:轻松应对百万级以上数据集
  2. 资源效率:内存消耗低,适合受限环境
  3. 实用便捷:参数少易实现,主流库均有支持

最佳实践

  • 初始化用K-Means++改善质量
  • 批大小设置为 b = 50 × K b = 50 \times K b=50×K
  • 多次运行取最佳结果
  • 结合肘部法(Elbow Method)选择K值

在工业界大规模聚类任务中,Mini-Batch K-Means已成为首选算法,在Spark MLlib、Scikit-learn等库中广泛实现。


http://www.hkcw.cn/article/TjMNYkRXUb.shtml

相关文章

前端框架Vue

vue基础知识点 首先介绍用 HTML 写结构 script 里写 Vue&#xff0c;不需要环境 1.差值表达式{{ }} <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Hello Vue</title><script src"https://cdn.jsdeliv…

ESP32系列AT固件快速开发——Wi-Fi MQTT

目录 【烧录固件时硬件接线】 【烧录固件】 【AT指令WiFi部分】 设置 Wi-Fi 模式 (Station/SoftAP/StationSoftAP) 查询 Wi-Fi 状态和 Wi-Fi 信息 【AT指令MQTT部分】 Demo:已验证的Wi-Fi连接MQTT连接、发布与订阅 设置MQTT用户属性 设置MQTT连接属性&#xff08;测试…

重温经典算法——并归排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 归并排序基于分治思想&#xff0c;递归地将数组拆分为两个子数组&#xff0c;分别排序后合并。时间复杂度为 O(n log n)&#xff0c;空间复杂度 O(n)&#xff08;…

05-power BI高级筛选器filter与Values人工造表

返回一个表&#xff0c;用于表示另一个表或表达的子集&#xff0c;不能够单独使用&#xff0c; fileter函数对筛选的表进行横向的逐行扫描&#xff0c;这样的函数也叫迭代函数 例&#xff1a;countrows(fileter(表筛选条件))filter的第一参数必须是唯一值得表&#xff0c; 如果…

贪心算法应用:欧拉路径(Fleury算法)详解

Java中的贪心算法应用&#xff1a;欧拉路径&#xff08;Fleury算法&#xff09;详解 一、欧拉路径与欧拉回路基础 1.1 基本概念 欧拉路径&#xff08;Eulerian Path&#xff09;是指在一个图中&#xff0c;经过图中每一条边且每一条边只经过一次的路径。如果这条路径的起点和…

【CF】Day73——Codeforces Round 887 (Div. 2) B (思维 + 模拟)

B. Fibonaccharsis 题目&#xff1a; 思路&#xff1a; 比C题有意思&#xff0c;但也么意思 对于这一题我们可以考虑最小的情况&#xff0c;即 f0 0&#xff0c;f1 1 时&#xff0c;然后看看什么时候会超过 n 的最大值&#xff0c;我们可以发现 k > 30 时就炸了&#xff…

工作流引擎-16-开源审批流项目之 整合Flowable官方的Rest包

工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#xff0c;支持现实世界的流程自动化需求 工作流引擎-02-BPM OA ERP 区别和联系 工作流引擎-03-聊一聊流程引擎 工作流引擎-04-流程引擎 activiti 优…

Windows+VSCode搭建小智(xiaozhi)开发环境

作为一名DIY达人&#xff0c;肯定不会错过最近很火的“小智AI聊天机器人”&#xff0c;网上教程非常丰富&#xff0c;初级玩家可以直接在乐鑫官方下载ESP-IDF安装包并经过简单的菜单式配置后&#xff0c;即可进行代码编译和烧录&#xff08;详见&#xff1a;Docs&#xff09;。…

《仿盒马》app开发技术分享-- 购物车业务逻辑完善(端云一体)

开发准备 之前我们已经实现了购物车相关的内容&#xff0c;实现了购物车数据列表的展示&#xff0c;但是我们结算订单之后我们的购物车列表并没有刷新&#xff0c;而且底部的状态栏并没有明显的数据展示来提醒用户&#xff0c;而且当我们在商品详情页添加新商品&#xff0c;底…

谷歌CEO皮查伊眼中的“下一代平台“与未来图景

目录 前言 一、从"能力秀"到"平台重构"&#xff1a;AI的"第二乐章" 二、"万物皆可创"&#xff1a;AI如何引爆每个人的创造力&#xff1f; 三、AI走出屏幕&#xff1a;XR眼镜与机器人的未来交响曲 四、Web不死&#xff0c;只是换了…

DDC Learning Record(2)

这些是 “UV 生成策略”&#xff0c;决定了 Houdini 如何分析模型空间&#xff0c;并分配 UV 坐标。它们只影响 UV 坐标的生成方式&#xff0c;不影响后续贴图的读取行为。 face得到的结果是&#xff1a; 每个面都被映射到了整张贴图&#xff08;[0,1]&#xff09;&#xff0c;…

MySQL数据库从0到1

目录 数据库概述 基本命令 查询命令 函数 表的操作 增删改数据和表结构 约束 事务 索引 视图 触发器 存储过程和函数 三范式 数据库概述 SQL语句的分类&#xff1a; DQL&#xff1a;查询语句&#xff0c;凡是select语句都是DQL。 DML&#xff1a;insert,delete,up…

STM32CubeDAC及DMA配置

STM32CubeDAC及DMA配置 一&#xff0c;问题1二&#xff0c;解决11&#xff0c;宏观思路CubeMX配置2&#xff0c;HAL_TIM_Base_Start(&htim6) 的作用1&#xff0c;作用1&#xff1a;使能TIM6的时钟并让它开始计数2&#xff0c;作用2&#xff1a;当 TIM6 溢出时&#xff0c;会…

c++ 赋值函数和拷贝构造函数的调用时机

测试代码&#xff1a; void testcopyAndFuzhi() {class Dog {private:string name;public:Dog(string myname) : name(myname) {}Dog(Dog& otherDog) {std::cout << "调用拷贝构造函数." << endl;this->name otherDog.name;}Dog& operator …

Python列表、字典、元组、集合

列表 list 基本格式&#xff1a;列表名 [元素1,元素2,元素3] 所有元素放在[ ]之中&#xff0c;元素之间用逗号","隔开&#xff0c;元素可以是不同的类型 列表的类型也是列表 li [1,"hello",2] print(type(li)) 列表是可迭代对象&#xff0c;可以用fo…

sctpscan:用于发现 SCTP 网络扫描器!全参数详细教程!Kali Linux教程!

简介 用于发现和安全的 SCTP 网络扫描器 sctpscan 是一款 SCTP 协议端口扫描工具&#xff0c;主要用于识别目标主机上开放的 SCTP&#xff08;Stream Control Transmission Protocol&#xff09;服务端口。 sctpscan 的主要功能是&#xff1a; 探测目标主机 SCTP 协议是否开…

力扣题解654:最大二叉树

一、题目内容 题目要求根据一个不重复的整数数组 nums 构建最大二叉树。最大二叉树的构建规则如下&#xff1a; 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。返回由 nums 构…

车载诊断架构 --- DTC消抖参数(Trip Counter DTCConfirmLimit )

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

75.解决当编辑完用户消息,确认重新生成AI回答时,已有的AI回答还是存在,并且新生成的回答并没有显示到气泡里bug

在上一个bug解决完后&#xff0c;又出来一个bug&#xff0c;我真是服了哈哈哈 新的bug是&#xff1a; 当编辑完用户消息&#xff0c;确认重新生成AI回答时&#xff0c;已有的AI回答还是存在&#xff0c;并且新生成的回答并没有显示到气泡里 出现这个bug的原因还是出现在rege…

C# 用户控件(User Control)详解:创建、使用与最佳实践

在C#应用程序开发中&#xff0c;用户控件&#xff08;User Control&#xff09;是一种强大的工具&#xff0c;它允许开发者将多个标准控件组合成一个可复用的自定义组件。无论是Windows Forms还是WPF&#xff0c;用户控件都能显著提高UI开发的效率&#xff0c;减少重复代码&…