Ch.08

K均值聚类:无标签分组

在没有任何标签的情况下,仅根据数据将相似样本聚成K类的无监督学习代表算法。通过K均值,从概念→直观→公式→应用,理解Ch01中“无监督”如何落地,以及如何用距离构造K个簇。结合Ch02的KNN距离公式,通过可视化理解“按类聚集”的迭代过程。

按章节的机器学习图示

选择章节后,下方图示会切换为该章节内容。可一览机器学习脉络。

将各点分配到最近的中心,再将中心更新为所属点的均值,反复进行。

① 数据 — 无标签的点分布在特征空间中

点: 数据

K均值聚类:无标签分组

K均值是什么? — 当没有标签yy、只有数据x1,x2,\mathbf{x}_1, \mathbf{x}_2, \ldots时,按最近中心将点划分成K个簇。距离采用Ch02中的欧氏距离d(x,μ)=j(xjμj)2d(\mathbf{x}, \boldsymbol{\mu}) = \sqrt{\sum_j (x_j - \mu_j)^2}。每个簇由一个中心(质心)μk\boldsymbol{\mu}_k表示,反复执行“各点归入最近中心”和“各簇点坐标求平均作为新中心”,直到收敛。
K表示“分成几类” — K均值中簇数K由用户事先给定。K=2即两类,K=3即三类。因无真实标签,“哪一类是正确答案”不可知,只能得到“相似样本聚在一起”的结果。实践中常结合领域知识、肘部法或轮廓系数等选择K。
目标:最小化簇内距离和(SSE) — 算法最小化畸变(SSE)J=k=1KiCkxiμk2J = \sum_{k=1}^K \sum_{i \in C_k} \|\mathbf{x}_i - \boldsymbol{\mu}_k\|^2。中心更新式μk=1CkiCkxi\boldsymbol{\mu}_k = \frac{1}{|C_k|}\sum_{i \in C_k} \mathbf{x}_i表示“该簇内点的坐标平均”,这样更新会使该簇的SSE下降。
若觉得公式难懂 — 距离公式就是在量“一个点和一个中心之间的长度”;SSE JJ 是把“簇有多紧”用一个数表示;中心更新式就是“该簇内点坐标的平均”。下面公式说明中会按符号逐一解释。
Ch01无监督学习的具体实现 — K均值是“无标签、找结构/聚类”的典型算法,常用于客户分群、文档/图像聚类、异常检测预处理等。
客户细分 — 仅有购买记录、无客户类型标签时,用K均值将相似客户聚成若干群,再由人为各群赋予含义(如VIP、流失风险),用于后续Ch09、Ch12等任务。
直观且实现简单 — 仅需“分配”和“求平均”两步迭代,便于实现,且在二维上可直观看到“聚成几团”的过程。
聚类 — 客户细分、主题/文档聚合、图像颜色或区域压缩、基因表达分组等。
预处理与特征摘要 — 将簇编号作为新特征输入监督模型,或仅保留簇中心以压缩数据。
K的选择 — K由用户指定;可对多个K比较SSE或轮廓等指标(如肘部法)再选定。
小结
(1) 输入:无标签点、簇数 KK
(2) 初始化:放置 KK 个中心(随机或启发式)。
(3) 分配:各点归入最近中心所属簇。
(4) 更新:各簇点的坐标均值作为新中心。
(5) 重复:3–4 步直至分配与中心不再变化。
目标:最小化 SSE(畸变)J=kiCkxiμk2J = \sum_{k}\sum_{i \in C_k} \|\mathbf{x}_i - \boldsymbol{\mu}_k\|^2
中心更新式μk=1CkiCkxi\boldsymbol{\mu}_k = \frac{1}{|C_k|}\sum_{i \in C_k} \mathbf{x}_i
解题步骤与例题见下表。
术语说明
  • 项目距离平方
  • 说明两点 (x1,y1)(x_1,y_1)(x2,y2)(x_2,y_2) 的欧氏距离平方:(x2x1)2+(y2y1)2(x_2-x_1)^2+(y_2-y_1)^2。仅比较时可不必开方。
  • 项目分配
  • 说明给定点和 KK 个中心时,计算到各中心的距离(或距离平方),最小者对应的中心编号(从1开始)即为该点所属簇。
  • 项目中心更新
  • 说明kk 内点的 xxyy 坐标分别求平均得新中心 (xˉk,yˉk)(\bar{x}_k, \bar{y}_k);需取整时再四舍五入。
  • 项目SSE
  • 说明簇内 J=iCkxiμk2J = \sum_{i \in C_k} \lVert\mathbf{x}_i - \boldsymbol{\mu}_k\rVert^2,即各点到中心的距离平方和。

例(分配)
中心 μ1=(0,0)\mu_1=(0,0)μ2=(4,0)\mu_2=(4,0),点 (2,0)(2,0) 所属簇号?
距离平方 d12=4d_1^2=4d22=4d_2^2=4,相等时取 1。→ 答案 1

例(中心更新)
簇 1 含点 (1,2)(1,2)(3,4)(3,4),则新中心 xˉ=(1+3)/2=2\bar{x}=(1+3)/2=2yˉ=(2+4)/2=3\bar{y}=(2+4)/2=3。→ (2, 3)
公式说明
① 距离 d(x,μ)=j(xjμj)2d(\mathbf{x}, \boldsymbol{\mu}) = \sqrt{\sum_j (x_j - \mu_j)^2}
什么意思? — 表示一个数据点 x\mathbf{x} 与一个中心 μ\boldsymbol{\mu} 之间的直线距离(用尺子量的长度)。
符号怎么读?xjx_j 是该点第 jj 个特征的值,μj\mu_j 是中心第 jj 个坐标。例如特征有两个(如身高、体重)时,x1x_1x2x_2 就是这两个数;先算 (x1μ1)2+(x2μ2)2(x_1-\mu_1)^2 + (x_2-\mu_2)^2,再开平方根,在二维下就是勾股定理的“直线长度”。
数字例子 — 点 (1,2)(1,2)、中心 (4,6)(4,6) 时,差为 41=34-1=362=46-2=4。距离平方 =32+42=25= 3^2+4^2=25,距离 =25=5= \sqrt{25}=5
在 K 均值里 — 只需要比较哪个中心更近,所以可以不开方,只算距离平方 (x1μ1)2+(x2μ2)2(x_1-\mu_1)^2+(x_2-\mu_2)^2;更小的那个就是更近的中心。
一句话:求点与中心之间直线距离(或距离平方)的公式。

② 目标(SSE) J=kiCkxiμk2J = \sum_{k}\sum_{i \in C_k} \lVert\mathbf{x}_i - \boldsymbol{\mu}_k\rVert^2
什么意思? — 把“每个簇里、各点到该簇中心距离的平方”全部加起来,得到的总和叫 SSE(畸变)。
符号怎么读?kk=簇的编号(1、2、…)。CkC_k=属于第 kk 簇的点的集合。xi\mathbf{x}_i=第 ii 个点的坐标。μk\boldsymbol{\mu}_k=第 kk 簇的中心。xiμk2\lVert \mathbf{x}_i - \boldsymbol{\mu}_k \rVert^2 就是点 ii 到该中心的距离平方
为什么用平方? — 用平方后“越远越大”,且都是正数,这样 JJ 就能表示簇有多散。JJ 越小说明点越紧挨中心,算法通过移动中心来减小 JJ
例子 — 若某簇有 3 个点,它们到中心的距离平方分别是 1、4、9,则该簇的贡献是 1+4+9=141+4+9=14JJ 就是所有簇的这种贡献之和。
一句话:表示簇有多紧的一个数;越小越好。

③ 中心更新 μk=1CkiCkxi\boldsymbol{\mu}_k = \frac{1}{|C_k|}\sum_{i \in C_k} \mathbf{x}_i
什么意思? — 把第 kk 簇里所有点的坐标平均一下,用这个平均作为新的中心。
符号怎么读?Ck|C_k|=第 kk 簇里点的个数iCkxi\sum_{i \in C_k} \mathbf{x}_i=这些点的 xxyy 坐标分别全部相加。再乘上 1Ck\frac{1}{|C_k|} 就得到平均
数字例子 — 某簇有 (1,2)(1,2)(3,4)(3,4)(5,0)(5,0) 三个点,则 Ck=3|C_k|=3xx 的和 =1+3+5=9= 1+3+5=9yy 的和 =2+4+0=6= 2+4+0=6。新中心 xˉ=9/3=3\bar{x}=9/3=3yˉ=6/3=2\bar{y}=6/3=2(3, 2)
为什么是平均? — 把中心移到点的平均位置,可以减小该簇内“点到中心距离平方之和(SSE)”,所以 K 均值用这个公式更新中心。
一句话:新中心 = 该簇内点的 xx 平均、yy 平均。