机器学习_05_k-means算法

详解 k-Means 算法

一、概念

k-Means 是一种无监督学习的聚类算法,用于将数据划分为 k 个互不重叠的簇 (clusters)。 其核心思想是:通过迭代优化,将样本分配到最近的簇中心(质心),并更新质心位置,直到收敛。

复制代码
from sklearn.cluster import KMeans

二、底层流程

  1. 随机初始化:从数据中随机选 K 个点作为初始质心

  2. 分配样本:计算每个样本到所有质心的距离,分给最近的质心所属的簇

  3. 更新质心:对每个簇,计算簇内所有样本的均值,作为新的质心

  4. 重复 2、3 步:直到质心不再变化

注意:质心是向量空间里的一个坐标点,不要求恰好有一个样本在那里。


三、聚类评估方法

1. SSE(误差平方和)

  • 所有样本到其质心的距离平方和

  • SSE 越小 → 簇内越紧密 → 效果越好

  • 但 K 越大 SSE 一定越小(K=样本数时 SSE=0)

  • 肘方法:找 SSE 突然变缓的拐点

2. SC(轮廓系数)

  • 取值范围:-1, 1

    • 越接近 1 → 效果好

    • 接近 0 → 在边界上

    • 为负 → 可能分错簇

  • 越大越好

3. CH(Calinski-Harabasz 指数)

  • CH = (簇间离散度) / (簇内离散度)

  • CH 越大 → 簇间越分散,簇内越紧密 → 效果好

  • 越大越好

python

复制代码
# 示例代码
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score, calinski_harabasz_score
​
kmeans = KMeans(n_clusters=3, random_state=42)
labels = kmeans.fit_predict(X)
sse = kmeans.inertia_
sc = silhouette_score(X, labels)
ch = calinski_harabasz_score(X, labels)

四、优缺点与适用场景

优点

  • 简单直观,容易理解

  • 速度快,适合大数据集

  • 可解释性强(质心可以直接看)

  • 只要指定 K,就能自动聚类

缺点

  • 必须事先指定 K(通常不知道)

  • 对初始质心敏感(不同初始化可能结果不同)

  • 只能发现球形簇(无法处理复杂形状,如同心圆、细长条)

  • 对异常值敏感(离群点会拉偏质心)

  • 假设各簇大小、密度相近(不均匀时效果差)

适用场景

场景 说明
✅ 客户分群 电商、银行用户画像
✅ 图像压缩 颜色量化
✅ 数据预处理 先聚类再分类
✅ 文档主题划分 文本聚类
✅ 球形数据 数据分布近似球形,簇大小相近

五、面试回答(总分总结构)

k-Means 是一种无监督学习的聚类算法,用于将数据划分为 k 个互不重叠的簇。其核心思想是通过迭代优化,将样本分配到最近的簇中心(质心),并更新质心位置,直到收敛。

工作原理(四步循环):

  1. 随机初始化 K 个质心

  2. 把每个样本分配给离它最近的质心,形成 K 个簇

  3. 对每个簇,计算簇内所有样本的平均值,作为新的质心

  4. 重复直到质心不变

K 值怎么选:

  • 肘方法(看 SSE 拐点)

  • 轮廓系数(SC 越大越好)

  • CH 指数(越大越好)

  • 通常结合肘方法和轮廓系数一起判断

优缺点: 优点是简单、快、可解释;缺点是需要事先指定 K,对初始值敏感,只能发现球形簇。

与监督学习的区别: 聚类没有标签,只看数据本身的相似性。分类是有标签的监督学习,聚类是无监督的探索性分析。

k-Means 是聚类任务的入门算法,适合数据分布近似圆形、簇大小相近的场景。不确定 K 值时用肘方法和轮廓系数辅助判断。


六、快速记忆口诀

随机选心,近者归队,队内求均,重复至稳。 肘看拐点,轮看系数,球状数据,k 值先估。

相关推荐
不正经学生10 分钟前
C语言大小端字节序:内存里字节的排列顺序
c语言·开发语言·arm开发·c++·算法·c#
逻辑君29 分钟前
科技逆向外语|20260805
人工智能·科技·机器学习
依然鸣1 小时前
PTA团体程序设计天梯赛L2真题讲解L2-001-004
经验分享·学习·算法·深度优先·pat考试
杨航 AI3 小时前
** AI 面试算法 50 题清单**,不是单纯的 LeetCode 题号列表,而是按照“**考察概率 × 面试价值 × 你当前准备方向**”排序
算法·leetcode·面试
m0_720245019 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC10 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯10 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院11 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李12 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
泰迪智能科技0112 小时前
职业技术证书推荐:机器学习工程师证书
人工智能·机器学习