一、K-means 算法概述

K-means 是一种无监督学习算法,用于将数据集划分为 K 个互不重叠的簇,使得同一个簇内的样本尽可能相似,而不同簇的样本尽可能不同
相似度通常用欧氏距离衡量,聚类目标是最小化所有簇内样本到其簇中心(质心)的平方距离之和(即 SSE,簇内误差平方和)。

二、算法核心步骤

1.指定簇数 K(需预先给定)。

2.随机初始化 K 个簇中心(质心)。

3.迭代过程:

分配阶段:将每个样本分配到距离最近的质心所在的簇。

更新阶段:重新计算每个簇内所有样本的均值,作为新的质心。

4.重复“分配-更新”直到质心不再变化或达到最大迭代次数。

三、实践案例

1. 数据读取与预处理

data.txt 包含 20 款啤酒的 4 个数值特征calories(卡路里)、sodium(钠含量)、alcohol(酒精浓度)、cost(成本)。

前两行(列名)被正确识别,name 列作为标识,不参与聚类。

2. 特征提取与标准化

因为四个特征的数值差距过大,若直接使用原始数值,值大的特征会主导距离计算,导致聚类结果偏向高量纲特征。

标准化使每个特征均值为 0、方差为 1,赋予每个特征同等权重。

3. 肘部法则确定最佳 K 值

3.1对 K=1~9 分别运行 K-means,计算每个模型的 SSE(簇内误差平方和)

3.2.肘部法则:随着 K 增大,SSE 必然下降,但当 K 超过数据中真实存在簇的种类数时,SSE 的下降速度会显著变缓,形成“肘部”点,该点即为最佳 K。

4.应用 K-means 并输出结果

设定 K=3,运行算法,为每行数据分配簇标签(0,1,2)。

四、总结

本次实践实现数据加载 → 标准化 → 肘部法选 K → 聚类 → 结果输出
通过该实践,可以直观理解 K-means 如何依据多维特征将啤酒自动分组,并借助中心点解读每组特征差异。

更多推荐