【scikit-learn】sklearn.cluster.MiniBatchKMeans 类:小批量 K 均值聚类

sklearn.cluster.MiniBatchKMeans(小批量 K 均值聚类)

MiniBatchKMeanssklearn.cluster 提供的 小批量 K 均值聚类(MiniBatch K-Means) 方法,它是 KMeans 的改进版本,适用于 大规模数据集,通过 小批量随机梯度更新 来加速计算,减少内存使用。


1. MiniBatchKMeans vs. KMeans

模型适用情况主要区别
KMeans标准 K 均值聚类计算成本较高,每次迭代使用所有数据
MiniBatchKMeans适用于大规模数据每次使用一个小批量数据进行更新,提高速度

对比

  • KMeans 每次迭代使用所有数据,计算开销大,适用于小规模数据
  • MiniBatchKMeans 每次迭代仅使用一个小批量数据,计算更快,适用于大规模数据

2. MiniBatchKMeans 代码示例

(1) 训练 MiniBatchKMeans 聚类模型

from sklearn.cluster import MiniBatchKMeans
import numpy as np

# 生成数据
X = np.random.rand(1000, 2)  # 1000 个二维点

# 训练 MiniBatchKMeans 聚类模型
model = MiniBatchKMeans(n_clusters=5, batch_size=50, random_state=42)
model.fit(X)

# 预测簇标签
labels = model.predict(X)
print("簇标签:", labels[:10])

解释

  • n_clusters=5:指定 5 个聚类簇。
  • batch_size=50:每次迭代仅使用 50 个数据点进行计算,提高速度。
  • fit(X):训练 MiniBatchKMeans,更新质心。

3. MiniBatchKMeans 主要参数

MiniBatchKMeans(n_clusters=5, batch_size=50, max_iter=100, random_state=42)
参数说明
n_clusters聚类数(默认 8,值越大,计算复杂度越高)
batch_size小批量大小(默认 100,值越大,计算更精确,但速度下降)
max_iter最大迭代次数(默认 100,用于避免收敛失败)
init初始化方法(默认 "k-means++",可选 "random"
random_state随机种子(控制初始化一致性)

4. 选择最佳聚类数 (n_clusters)

import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score

# 计算不同 K 值下的轮廓系数
K_values = range(2, 10)
sil_scores = []

for k in K_values:
    model = MiniBatchKMeans(n_clusters=k, batch_size=50, random_state=42)
    labels = model.fit_predict(X)
    sil_scores.append(silhouette_score(X, labels))

# 绘制轮廓系数曲线
plt.plot(K_values, sil_scores, marker="o")
plt.xlabel("聚类数 (K)")
plt.ylabel("轮廓系数")
plt.title("选择最佳 K 值")
plt.show()

解释

  • 轮廓系数(Silhouette Score) 衡量聚类质量,值越大越好。
  • 观察折点(Elbow Point) 选择最佳 K

5. MiniBatchKMeans 可视化

import seaborn as sns

sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=labels, palette="coolwarm")
plt.scatter(model.cluster_centers_[:, 0], model.cluster_centers_[:, 1], s=200, c="black", marker="X", label="Centroids")
plt.legend()
plt.title("MiniBatchKMeans 聚类结果")
plt.show()

解释

  • 黑色 X 标记质心位置

6. 计算聚类性能

from sklearn.metrics import silhouette_score

score = silhouette_score(X, labels)
print("轮廓系数:", score)

解释

  • silhouette_score(X, labels):评估聚类效果(值越大越好)。

7. MiniBatchKMeans vs. KMeans

from sklearn.cluster import KMeans
import time

# 计算 KMeans 训练时间
start = time.time()
kmeans_model = KMeans(n_clusters=5, random_state=42)
kmeans_model.fit(X)
print("KMeans 训练时间:", time.time() - start)

# 计算 MiniBatchKMeans 训练时间
start = time.time()
minibatch_model = MiniBatchKMeans(n_clusters=5, batch_size=50, random_state=42)
minibatch_model.fit(X)
print("MiniBatchKMeans 训练时间:", time.time() - start)

解释

  • MiniBatchKMeans 训练速度快于 KMeans,适用于大规模数据集。

8. MiniBatchKMeans vs. DBSCAN vs. AgglomerativeClustering

方法适用情况主要区别
MiniBatchKMeans数据均匀分布,适用于大规模数据需要预设簇数,易受初始点影响
DBSCAN适用于噪声数据,簇形状不规则不需预设簇数,依赖 epsmin_samples
AgglomerativeClustering适用于层级结构的数据适用于小规模数据,可视化树形结构

9. 适用场景

  • 大规模数据聚类(如 上百万数据点)。
  • 在线学习(Online Learning)(可用于 流数据处理)。
  • 图像分割(如 KMeans 颜色量化)。

10. 结论

  • MiniBatchKMeans 适用于大规模数据集,计算速度快,效果接近 KMeans,但在小数据集上可能不如 KMeans 精确。适用于 实时数据聚类、在线学习和图像处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值