从零开始理解 K 均值聚类:原理、实现与应用

一、什么是聚类?从 "物以类聚" 说起

聚类属于机器学习中的 "无监督学习"------ 也就是说,我们手里只有数据,没有提前标注的 "标签"(比如 "这是高消费客户""这是低消费客户")。聚类的核心思想很简单:让相似的样本聚在一起,不相似的样本分开

举个例子,假设有 5 个样本(A、B、C、D、E),每个样本有两个特征(x₁和 x₂),数据如下:

样本 x₁ x₂
A 3 1
B 1 0
C 1 2
D 0 4
E 2 5

直观来看,A、B、C 的 x₁和 x₂数值更接近,D 和 E 的数值更接近,这就是聚类要捕捉的 "相似性"。

二、K 均值的核心:如何定义 "相似"?距离度量是关键

判断样本是否 "相似",本质是计算样本间的 "距离"------ 距离越近,越相似。K 均值中最常用的距离度量有两种:

  1. 欧式距离:最直观的 "直线距离" 比如二维平面上两点 (x₁,y₁) 和 (x₂,y₂) 的欧式距离,就是我们初中学的 "两点间距离公式": \(d = \sqrt{(x₁-x₂)² + (y₁-y₂)²}\) 推广到 n 维空间,就是所有特征差值的平方和开根号。

  2. 曼哈顿距离:像出租车在网格状街道上行驶的 "实际距离" 二维平面上的公式为:\(d = |x₁-x₂| + |y₁-y₂|\)(只算水平和垂直方向的距离总和)。

三、K 均值算法步骤:4 步实现聚类

K 均值的核心是 "迭代优化",通过 4 个步骤不断调整分组,直到结果稳定:

  1. 初始化聚类中心:随机选择 k 个样本作为初始 "中心"(k 是我们预设的聚类数量)。
  2. 分配样本:计算每个样本到 k 个中心的距离,把样本分到距离最近的中心所在的组。
  3. 更新中心:每个组内所有样本的 "均值"(比如 x₁的均值、x₂的均值)就是新的中心。
  4. 迭代收敛:重复步骤 2 和 3,直到中心不再明显变化(或达到最大迭代次数),此时的分组就是最终结果。

举个简单的例子:如果要把上述 5 个样本聚成 2 类(k=2),可能先随机选 A 和 D 作为初始中心,然后根据距离把 B、C 分到 A 组,E 分到 D 组,再重新计算两组的均值作为新中心,直到分组稳定。

四、如何评估聚类效果?CH 指标来帮忙

聚类的难点之一是 "怎么知道分的好不好"。K 均值中常用CH 指标(Calinski-Harabasz 指数):

  • 计算 "类内紧密度":每个样本到所在组中心的距离平方和(越小越好);
  • 计算 "类间分离度":各组中心到所有样本总中心的距离平方和(越大越好);
  • CH 指标 = (分离度 / 紧密度)× 调整系数,数值越大,说明聚类效果越好(类内越紧凑,类间越分散)。
五、K 均值的优缺点:适用场景与局限
  • 优点:简单易实现,计算速度快,适合处理大规模常规数据集。
  • 缺点
    • k 值需要人工预设(很难一开始就确定最佳 k);
    • 对初始中心敏感(不同初始中心可能得到不同结果);
    • 只能发现 "凸形" 簇(比如圆形、椭圆形),对不规则形状的簇(如月牙形)效果差。
六、实战:用 Python 实现 K 均值聚类

我们用 scikit-learn 库来实战,步骤如下:

  1. 生成模拟数据(用make_blobs函数):

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

    生成3个簇的数据集,100个样本,2个特征

    X, y_true = make_blobs(n_samples=100, n_features=2, centers=3, random_state=42)
    plt.scatter(X[:, 0], X[:, 1], s=50) # 可视化原始数据

  2. 用 KMeans 聚类:

    from sklearn.cluster import KMeans

    kmeans = KMeans(n_clusters=3, random_state=42) # 设定k=3
    y_pred = kmeans.fit_predict(X) # 训练并预测分组

    可视化聚类结果

    plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50, cmap='viridis')
    centers = kmeans.cluster_centers_ # 提取最终聚类中心
    plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.7, marker='X') # 标记中心

运行后,就能看到数据被分成 3 组,红色 "X" 是各组中心,效果一目了然。

总结

K 均值是聚类算法中的 "入门款",凭借简单高效的特点,在客户分群、图像分割、异常检测等场景中广泛应用。但它也有局限,实际使用时需结合数据特点选择合适的距离度量和 k 值,必要时搭配其他聚类算法(如 DBSCAN)使用。下一篇,我们将聊聊如何通过 "组合多个模型" 提升预测能力 ------ 集成学习的奥秘。

相关推荐
m沐沐3 小时前
【机器学习】DBSCAN聚类算法——原理、参数调优与实战
人工智能·python·深度学习·算法·机器学习·聚类·dbscan
问商十三载3 小时前
GEO优化的6个核心诊断工具,2026年实操版详解
人工智能·算法·机器学习
过期的秋刀鱼!4 小时前
学习曲线-过拟合和欠拟合要做什么以及原因
人工智能·python·深度学习·算法·机器学习·模型评估
m沐沐4 小时前
【自然语言处理】词向量转换与中文文本情感分类——从CountVectorizer到朴素贝叶斯
人工智能·算法·机器学习·自然语言处理·分类·中文分词·词向量转换
野生的程序媛6 小时前
02-提示词与检索增强
人工智能·神经网络·算法·决策树·机器学习·ai·ai-native
小罗水6 小时前
第 20 章 高级 RAG 技术与检索优化
人工智能·python·机器学习
念啊啊啊啊丶6 小时前
【工业异常异常检测】2026-ICML-CoGeoAD:基于多视图注意力机制的分层颜色几何融合零样本3D异常检测
人工智能·深度学习·神经网络·机器学习·计算机视觉
阳明山水6 小时前
销量预测2026下半年:新架构、新基准与新共识
人工智能·深度学习·算法·机器学习·架构
知识分享小能手6 小时前
高等数学学习教程,从入门到精通,定积分 — 知识点全面总结(9)
学习·算法·机器学习
m沐沐7 小时前
【机器学习】矿物识别系统实战——六种填充方法×六种模型全面对比
人工智能·python·深度学习·机器学习·矿物识别