通俗易懂讲透 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 怎么做。

数据

朋友 唱歌 跳舞 画画
A 8 2 1
B 7 3 2
C 1 8 2
D 2 7 3
E 2 1 9
F 3 2 8
G 8 1 2
H 7 2 1
I 1 9 2
J 3 8 2

步骤(极简版)

  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=1∑Nk=1∑Krik∥xi−μk∥2

  • (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=i∈batch∑k=1∑Krik∥xi−μk∥2

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=argminj∥xi−μj∥2否则

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 把图像颜色聚类,实现图像压缩。

python 复制代码
# 安装依赖
# pip install numpy matplotlib scikit-learn pillow

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import MiniBatchKMeans
from PIL import Image

# 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 加速版 ,用小批量数据增量更新质心,在损失极少精度的前提下,实现速度与内存的巨大优化,是工业界最常用的聚类算法之一。

相关推荐
冬奇Lab7 分钟前
一天一个开源项目(第260篇):Plannotator —— 给 AI 编码 Agent 配一块「可批注的审阅台」,计划和代码改动都能在浏览器里逐条批示
人工智能·开源·claude
泯泷10 分钟前
语音,正在成为 AI Agent 最自然的接口
人工智能·llm·agent
承渊政道28 分钟前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛28 分钟前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
杨凯凡1 小时前
IT日报|2026-11-13:GitHub 大规模凭据攻击、Signal 形式化验证、Claude 新模型与 AI 安全诉讼
人工智能·安全·github
一个天蝎座 白勺 程序猿2 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
伞伞悦读2 小时前
【第83期】特征选择中的验证泄漏排查的实验与排查
人工智能·深度学习·机器学习
eggwyw2 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
用户697625682562 小时前
用 Alook 把本机编程 agent 拉进频道:Pi + MiniMax 实操
人工智能
P1Browser3 小时前
账号触发平台安全审核?拆解标准申诉流程与材料清单
大数据·人工智能·安全·多账号管理·指纹浏览器·账户安全·运营合规