【机器学习|学习笔记】K-means 聚类算法详解 + 优化方法(附 Python 代码)

【机器学习|学习笔记】K-means 聚类算法详解 + 优化方法(附 Python 代码)

【机器学习|学习笔记】K-means 聚类算法详解 + 优化方法(附 Python 代码)



欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/148514108


前言

  • K-means 是机器学习中最经典的无监督聚类算法之一。它不仅在基础研究中被广泛使用,也在现代机器学习系统(如图像分割、向量搜索、推荐系统、预训练模型的离散化等)中有着极其重要的实际应用。

✅ 一、K-means 算法简介

📌 核心思想:

  • n n n 个样本划分为 K K K 个簇,使得簇内距离最小、簇间距离最大。

📈 算法流程:

  • 1. 初始化 K K K 个簇中心(随机或优化方式)
  • 2. 对每个样本,分配给最近的中心
  • 3. 更新每个簇的中心点(取其所有成员点的均值)
  • 4. 重复步骤 2、3,直到收敛(中心点不再变化或最大迭代数)

🧪 二、Python 实现 K-means(以 sklearn 为例)

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 构造模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42)

# KMeans 聚类
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

# 可视化
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, c='red', marker='X')
plt.title("K-means 聚类结果")
plt.show()

🧠 三、K-means 的优缺点总结

优点 ✅缺点 ❌
实现简单,计算效率高对初始中心敏感(容易陷入局部最优)
对低维数据效果较好无法处理非凸簇或不同密度的簇
在大数据场景下易并行化K 值需要人为指定

🧩 四、K-means 常见优化方法

✅ 方法1:K-means++ 初始化

  • 问题:随机初始化可能选到不代表性样本,导致聚类质量差
  • K-means++ 会优先选择分布更“稀疏”的点作为初始中心,提升聚类稳定性。
KMeans(n_clusters=4, init='k-means++')

✅ 方法2:多次运行取最优(n_init)

KMeans(n_clusters=4, n_init=10)

✅ 方法3:肘部法则选择最优 K 值

inertias = []
for k in range(1, 10):
    model = KMeans(n_clusters=k, random_state=42).fit(X)
    inertias.append(model.inertia_)

plt.plot(range(1, 10), inertias, marker='o')
plt.xlabel("簇数 k")
plt.ylabel("SSE (inertia)")
plt.title("肘部法则选择最佳簇数")
plt.show()

✅ 方法4:MiniBatchKMeans(适合大规模数据)

  • K-means 的全量计算方式对大数据不友好,MiniBatchKMeans 用小批量更新中心,大大提升速度。
from sklearn.cluster import MiniBatchKMeans

mbk = MiniBatchKMeans(n_clusters=4, batch_size=100, random_state=42)
mbk.fit(X)

✅ 方法5:谱聚类、层次聚类等替代(非凸簇)

如果数据非线性分布(如两月牙状数据),K-means 无法正确划分,可改用:

  • 谱聚类(SpectralClustering)
  • DBSCAN(基于密度的聚类)

🧠 五、K-means 与现代机器学习的结合

场景应用说明
图像压缩对像素聚类(颜色聚类)降低色阶
向量搜索系统(如 FAISS)聚类索引加速 ANN 检索(IVF-PQ 结构)
词嵌入离散化Word2Vec/BERT 向量离散化为 token
图神经网络社区发现、节点划分
自监督学习聚类生成伪标签(如 DeepCluster)

🧮 六、K-means 聚类数学公式

  • 给定聚类中心 μ j μ_j μj,聚类目标为最小化:
    在这里插入图片描述
  • 本质上是最小化样本到各自簇中心的平方距离和(SSE)

✅ 七、总结 & 建议

内容推荐方案
✅ 聚类方法K-means:适合凸簇、低维、等方差
⚠ 初始化优化使用 K-means++ + 多次初始化(n_init)
📉 大规模数据使用 MiniBatchKMeans 加速
🔍 K 值选择使用肘部法或 Gap Statistics
🧠 替代方法对非凸簇数据可使用 DBSCAN / 谱聚类
🤖 实际工程向量检索中聚类作为 FAISS IVF 的核心组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不想努力的小土博

您的鼓励是我创作的动力!谢谢!

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

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

打赏作者

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

抵扣说明:

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

余额充值