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

张开发
2026/6/29 8:40:51 15 分钟阅读
通俗易懂讲透 Mini-Batch K-means
通俗易懂讲透 Mini-Batch K-means本科生/研究生都能看懂Mini-Batch K-means 就是标准 K-means 的高速版专门解决大数据跑不动的问题。本文用大白话通俗案例核心公式可直接运行代码从零讲透适合课堂笔记、实验报告。一、先回顾K-means 是什么聚类就是把相似的数据分到一组K-means 是最经典的聚类算法。标准 K-means 流程随机选 K 个点作为质心簇中心每个点分配到最近的质心重新计算每个簇的平均值作为新质心重复直到质心不再变化痛点数据量几百万、上千万时每次都遍历全量数据太慢、太占内存。二、Mini-Batch K-means 到底是什么一句话每次只抽一小批数据Mini-Batch更新质心不跑全量数据速度大幅提升结果近似标准 K-means。可以这么理解标准 K-means全班一起考试算平均分Mini-Batch K-means随机抽几组同学考试用这几组慢慢调整平均分三、超通俗案例用兴趣爱好给朋友分组我们用 10 个朋友的「唱歌、跳舞、画画」评分演示 Mini-Batch K-means 怎么做。数据朋友唱歌跳舞画画A821B732C182D273E219F328G812H721I192J382步骤极简版初始化随机选 A、C 作为两个质心抽一小批比如抽 B、D、F算距离用欧几里得距离看谁离哪个质心近分配簇B→簇1D→簇2F→簇1更新质心只用这批数据更新不用全量重复再抽一批继续更新直到稳定四、核心公式看懂就能写报告1. 标准 K-means 目标函数最小化所有点到质心的平方距离和J∑i1N∑k1Krik∥xi−μk∥2 J\sum_{i1}^{N} \sum_{k1}^{K} r_{i k}\left\| x_{i}-\mu_{k}\right\| ^{2}Ji1∑N​k1∑K​rik​∥xi​−μk​∥2(N)总样本数(K)簇数量xix_ixi​第iii个样本μk\mu_kμk​第kkk个质心rikr_{ik}rik​样本iii是否属于簇kkk0 或 12. Mini-Batch 目标函数只优化当前小批量数据Jmini∑i∈batch∑k1Krik∥xi−μk∥2 J_{mini }\sum_{i \in batch } \sum_{k1}^{K} r_{i k}\left\| x_{i}-\mu_{k}\right\| ^{2}Jmini​i∈batch∑​k1∑K​rik​∥xi​−μk​∥23. 分配规则最近质心rik{1kargminj∥xi−μj∥20否则 r_{i k} \begin{cases}1 karg min _{j}\left\| x_{i}-\mu_{j}\right\| ^{2} \\ 0 否则 \end{cases}rik​{10​kargminj​∥xi​−μj​∥2否则​4. 质心更新最重要Mini-Batch 用增量学习更新不是重新算均值μk(t1)μk(t)η⋅(xi−μk(t)) \mu_{k}^{(t1)}\mu_{k}^{(t)}\eta \cdot\left(x_{i}-\mu_{k}^{(t)}\right)μk(t1)​μk(t)​η⋅(xi​−μk(t)​)η1tk\eta \frac{1}{t_k}ηtk​1​学习率更新次数越多步长越小tkt_ktk​该质心被更新的次数好处不用存全量数据计算极快五、Mini-Batch K-means 完整算法流程随机初始化 K 个质心从全量数据中随机抽取一个 Mini-Batch对 Batch 内样本计算距离 → 分配到最近簇用增量公式更新质心重复抽取 Batch、更新直到质心收敛或达到最大迭代次数六、实战代码图像压缩可直接复制运行最经典应用用 Mini-Batch K-means 把图像颜色聚类实现图像压缩。# 安装依赖# pip install numpy matplotlib scikit-learn pillowimportnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportMiniBatchKMeansfromPILimportImage# 1. 加载图片并转为 RGB 数组imageImage.open(lenna.jpg).convert(RGB)imagenp.array(image)rows,cols,_image.shape# 2. 把图像展平为 (像素数, 3) 的格式Ximage.reshape(-1,3)# 3. 设置聚类参数n_colors16# 压缩成 16 种颜色batch_size1024# 小批量大小# 4. Mini-Batch K-means 聚类mb_kmeansMiniBatchKMeans(n_clustersn_colors,batch_sizebatch_size,random_state42)mb_kmeans.fit(X)# 5. 生成压缩图像labelsmb_kmeans.predict(X)centersmb_kmeans.cluster_centers_.astype(uint8)compressedcenters[labels].reshape(rows,cols,3)# 6. 对比显示plt.figure(figsize(12,5))plt.subplot(1,2,1)plt.imshow(image)plt.title(原始图像,fontsize14)plt.axis(off)plt.subplot(1,2,2)plt.imshow(compressed)plt.title(f压缩图像{n_colors}色,fontsize14)plt.axis(off)plt.tight_layout()plt.show()代码说明n_colors压缩后颜色数量越小压缩率越高batch_size一般设 256/512/1024越大越接近标准 K-means速度优势千万像素级图像也能秒级处理七、Mini-Batch K-means 优缺点面试/报告必背✅ 优点速度极快不用遍历全量数据复杂度远低于 (O(N))省内存适合超大规模数据百万支持流式数据可以一边来数据一边更新近似效果好多迭代几次几乎接近 K-means易分布式/ GPU 加速❌ 缺点精度略低于 K-means小数据集不推荐对初始质心敏感只适合欧式距离、凸簇需要调 batch_size八、适用场景什么时候用 必须用 Mini-Batch K-means数据量超内存、千万级以上需要快速出结果流式/在线学习图像压缩、颜色量化、用户分群、大数据预处理 不要用小数据集直接 K-means非凸、复杂形状簇用 DBSCAN超高维稀疏数据用谱聚类九、一句话总结Mini-Batch K-means 是大数据场景下的 K-means 加速版用小批量数据增量更新质心在损失极少精度的前提下实现速度与内存的巨大优化是工业界最常用的聚类算法之一。

更多文章