news 2026/4/15 9:56:25

通俗易懂讲透 Mini-Batch K-means

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
通俗易懂讲透 Mini-Batch K-means

通俗易懂讲透 Mini-Batch K-means(本科生/研究生都能看懂)

Mini-Batch K-means 就是标准 K-means 的高速版,专门解决大数据跑不动的问题。本文用大白话+通俗案例+核心公式+可直接运行代码,从零讲透,适合课堂笔记、实验报告。


一、先回顾:K-means 是什么?

聚类就是把相似的数据分到一组,K-means 是最经典的聚类算法。

标准 K-means 流程:

  1. 随机选 K 个点作为质心(簇中心)
  2. 每个点分配到最近的质心
  3. 重新计算每个簇的平均值作为新质心
  4. 重复直到质心不再变化

痛点:数据量几百万、上千万时,每次都遍历全量数据,太慢、太占内存


二、Mini-Batch K-means 到底是什么?

一句话:
每次只抽一小批数据(Mini-Batch)更新质心,不跑全量数据,速度大幅提升,结果近似标准 K-means。

可以这么理解:

  • 标准 K-means:全班一起考试,算平均分
  • Mini-Batch K-means:随机抽几组同学考试,用这几组慢慢调整平均分

三、超通俗案例:用兴趣爱好给朋友分组

我们用 10 个朋友的「唱歌、跳舞、画画」评分,演示 Mini-Batch K-means 怎么做。

数据

朋友唱歌跳舞画画
A821
B732
C182
D273
E219
F328
G812
H721
I192
J382

步骤(极简版)

  1. 初始化:随机选 A、C 作为两个质心
  2. 抽一小批:比如抽 B、D、F
  3. 算距离:用欧几里得距离看谁离哪个质心近
  4. 分配簇:B→簇1,D→簇2,F→簇1
  5. 更新质心:只用这批数据更新,不用全量
  6. 重复:再抽一批,继续更新,直到稳定

四、核心公式(看懂就能写报告)

1. 标准 K-means 目标函数

最小化所有点到质心的平方距离和
J=∑i=1N∑k=1Krik∥xi−μk∥2 J=\sum_{i=1}^{N} \sum_{k=1}^{K} r_{i k}\left\| x_{i}-\mu_{k}\right\| ^{2}J=i=1Nk=1Krikxiμk2

  • (N):总样本数
  • (K):簇数量
  • xix_ixi:第iii个样本
  • μk\mu_kμk:第kkk个质心
  • rikr_{ik}rik:样本iii是否属于簇kkk(0 或 1)

2. Mini-Batch 目标函数

只优化当前小批量数据
Jmini=∑i∈batch∑k=1Krik∥xi−μk∥2 J_{mini }=\sum_{i \in batch } \sum_{k=1}^{K} r_{i k}\left\| x_{i}-\mu_{k}\right\| ^{2}Jmini=ibatchk=1Krikxiμk2

3. 分配规则(最近质心)

rik={1k=argminj∥xi−μj∥20否则 r_{i k}= \begin{cases}1 & k=arg min _{j}\left\| x_{i}-\mu_{j}\right\| ^{2} \\ 0 & 否则 \end{cases}rik={10k=argminjxiμj2否则

4. 质心更新(最重要!)

Mini-Batch 用增量学习更新,不是重新算均值:
μk(t+1)=μk(t)+η⋅(xi−μk(t)) \mu_{k}^{(t+1)}=\mu_{k}^{(t)}+\eta \cdot\left(x_{i}-\mu_{k}^{(t)}\right)μk(t+1)=μk(t)+η(xiμk(t))

  • η=1tk\eta = \frac{1}{t_k}η=tk1:学习率(更新次数越多,步长越小)
  • tkt_ktk:该质心被更新的次数
  • 好处:不用存全量数据,计算极快

五、Mini-Batch K-means 完整算法流程

  1. 随机初始化 K 个质心
  2. 从全量数据中随机抽取一个 Mini-Batch
  3. 对 Batch 内样本:计算距离 → 分配到最近簇
  4. 用增量公式更新质心
  5. 重复抽取 Batch、更新,直到质心收敛或达到最大迭代次数

六、实战代码:图像压缩(可直接复制运行)

最经典应用:用 Mini-Batch K-means 把图像颜色聚类,实现图像压缩

# 安装依赖# pip install numpy matplotlib scikit-learn pillowimportnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportMiniBatchKMeansfromPILimportImage# 1. 加载图片并转为 RGB 数组image=Image.open("lenna.jpg").convert("RGB")image=np.array(image)rows,cols,_=image.shape# 2. 把图像展平为 (像素数, 3) 的格式X=image.reshape(-1,3)# 3. 设置聚类参数n_colors=16# 压缩成 16 种颜色batch_size=1024# 小批量大小# 4. Mini-Batch K-means 聚类mb_kmeans=MiniBatchKMeans(n_clusters=n_colors,batch_size=batch_size,random_state=42)mb_kmeans.fit(X)# 5. 生成压缩图像labels=mb_kmeans.predict(X)centers=mb_kmeans.cluster_centers_.astype("uint8")compressed=centers[labels].reshape(rows,cols,3)# 6. 对比显示plt.figure(figsize=(12,5))plt.subplot(1,2,1)plt.imshow(image)plt.title("原始图像",fontsize=14)plt.axis("off")plt.subplot(1,2,2)plt.imshow(compressed)plt.title(f"压缩图像({n_colors}色)",fontsize=14)plt.axis("off")plt.tight_layout()plt.show()

代码说明

  • n_colors:压缩后颜色数量,越小压缩率越高
  • batch_size:一般设 256/512/1024,越大越接近标准 K-means
  • 速度优势:千万像素级图像也能秒级处理

七、Mini-Batch K-means 优缺点(面试/报告必背)

✅ 优点

  1. 速度极快:不用遍历全量数据,复杂度远低于 (O(N))
  2. 省内存:适合超大规模数据(百万+)
  3. 支持流式数据:可以一边来数据一边更新
  4. 近似效果好:多迭代几次,几乎接近 K-means
  5. 易分布式/ GPU 加速

❌ 缺点

  1. 精度略低于 K-means(小数据集不推荐)
  2. 对初始质心敏感
  3. 只适合欧式距离、凸簇
  4. 需要调 batch_size

八、适用场景(什么时候用?)

👉 必须用 Mini-Batch K-means

  • 数据量超内存、千万级以上
  • 需要快速出结果
  • 流式/在线学习
  • 图像压缩、颜色量化、用户分群、大数据预处理

👉 不要用

  • 小数据集(直接 K-means)
  • 非凸、复杂形状簇(用 DBSCAN)
  • 超高维稀疏数据(用谱聚类)

九、一句话总结

Mini-Batch K-means 是大数据场景下的 K-means 加速版,用小批量数据增量更新质心,在损失极少精度的前提下,实现速度与内存的巨大优化,是工业界最常用的聚类算法之一。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 9:54:57

STM32F407ZGT6实战:基于CubeMax与FreeRTOS的LwIP TCP客户端自动重连机制

1. 从零搭建STM32F407ZGT6的LwIP TCP客户端 第一次用STM32F407ZGT6做网络通信时,我踩了不少坑。这个芯片自带以太网MAC控制器,配合PHY芯片就能实现网络功能。CubeMX配置时要注意,时钟树必须正确设置,特别是PHY芯片的RMII接口时钟要…

作者头像 李华
网站建设 2026/4/15 9:53:33

AD22 极坐标实战:精准规划PCB弧形布局与等距元件定位

1. 极坐标在PCB设计中的独特价值 很多工程师第一次接触极坐标系可能会觉得陌生,毕竟我们平时画板子用的都是直角坐标系。但当你需要设计弧形排列的LED灯带、环形天线阵列或者圆形控制面板时,极坐标简直就是救命稻草。我去年做一个智能手表的主板&#xf…

作者头像 李华
网站建设 2026/4/15 9:51:23

Ceres Solver 实战:从非线性最小二乘问题到高效优化解决方案

1. 初识Ceres Solver:非线性优化的瑞士军刀 第一次接触Ceres Solver是在处理机器人定位问题时遇到的。当时需要优化一组传感器观测数据,传统的最小二乘法在非线性场景下表现不佳,直到发现了这个由Google开源的C库。Ceres Solver就像一把精密的…

作者头像 李华
网站建设 2026/4/15 9:50:32

邵雍先天易图的发展历史渊薮

邵雍先天易图的发展历史大致可概括为源头奠基—北宋创构—南宋定型—元明衍化—近现代重构五阶段,从道家象数潜流到理学正统,再到现代跨学科研究,形成一条从“术数—义理—科学”的传承脉络。一、源头奠基:唐末五代的象数潜流&…

作者头像 李华