当前位置: 首页 > news >正文

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

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

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

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

样本x₁x₂
A31
B10
C12
D04
E25

直观来看,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)  # 可视化原始数据
  1. 用 KMeans 聚类:
from sklearn.cluster import KMeanskmeans = 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)使用。下一篇,我们将聊聊如何通过 “组合多个模型” 提升预测能力 —— 集成学习的奥秘。

http://www.xdnf.cn/news/1340029.html

相关文章:

  • 自学嵌入式第二十四天:数据结构(4)-栈
  • linux-ubuntu里docker的容器portainer容器建立后如何打开?
  • WSL的Ubuntu如何改名字
  • Ubuntu网络图标消失/以太网卡显示“未托管“
  • java项目:如何优化JVM参数?
  • nginx-自制证书实现
  • 读《精益数据分析》:精益画布——创业与产品创新的高效工具
  • 【工具】前端JS/VUE修改图片分辨率
  • 使用Docker部署Coze Studio开源版
  • Advanced Math Math Analysis |02 Limits
  • Oracle CLOB类型转换
  • k8s下的网络通信与认证
  • 【C++】模板(进阶)
  • 从YOLOv5到RKNN:零冲突转换YOLOv5模型至RK3588 NPU全指南
  • 在线课程|基于SprinBoot+vue的在线课程管理系统(源码+数据库+文档)
  • openEuler系统中如何将docker安装在指定目录
  • ES_文档
  • 【数据结构】树与二叉树:结构、性质与存储
  • 牛客:链表的回文结构详解
  • 牛客:链表分割算法详解
  • LeetCode100 -- Day3
  • C++---滑动窗口平滑数据
  • 深度学习之NLP基础
  • KB5063878补丁故障解决方案:从蓝屏幕到系统修复的全面指南
  • 短波红外科研相机:开启科研新视野的利器​
  • 【矩池云】实现Pycharm远程连接,上传数据并解压缩
  • C++入门自学Day16-- STL容器类型总结
  • 全文 part1 - DGEMM Using Tensor Cores, and Its Accurate and Reproducible Versions
  • 阿里云对象存储OSS之间进行数据转移教程
  • 打工人项目日报计划