大家的AI
机器学习AI论文
加载中…

学习

🏅我的成就

Ch.08

K均值聚类:无标签分组

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

按章节的机器学习图示

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

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

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

点: 数据

K均值聚类:无标签分组

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

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

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

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

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