← 全部章节

P14 · 第 14 讲

分类神奇宝贝Pokemon

1:09:41

本章目录(8 节)
  1. 一、本节的问题与直观理解
  2. 二、核心知识:先验、似然、后验
  3. 三、关键推导:从贝叶斯公式到一条直线(附真实数值)
  4. 四、原讲义例子:47% → 54% → 73%
  5. 五、易错点
  6. 六、自测
  7. 七、30 秒速记
  8. 八、和其他 P 的关系
项 内容
课程版本 李宏毅 2016 秋季《Machine Learning》Lecture 4:Classification
视频分 P https://www.bilibili.com/video/BV1ou411N7X3?p=14 (1:09:41;搬运合集)
官方讲义 Classification (v3).pdf,35 页
材料说明 对应官方讲义整理+必要补充,非视频逐字稿

页码为 PDF 物理页(封面第 1 页)。本讲用宝可梦的七项数值属性预测它的属性类型(Water / Normal),走的是概率生成模型路线;下文数据数字(79/61、均值、协方差、准确率)全部出自讲义,标「复习补充」的才是自编计算。

一、本节的问题与直观理解

第 4 页把七项属性列成一张表:Total、HP、Attack、Defense、SP Atk、SP Def、Speed,并问「能不能根据这些信息预测宝可梦的 type」。这是一个二分类问题:输入 \(\mathbf{x}\in\mathbb{R}^{D}\),输出 \(y\in\{\text{Water},\text{Normal}\}\)。

最直觉的做法是把分类当回归:Water 标 1、Normal 标 −1,拟合一条线,测试时看输出离哪边近。第 6 页先这么写,第 7 页立刻指出两个问题。其一,「太正确」的样本反而被惩罚:一个标签为 1 的点如果被预测成 5,回归会继续把它往 1 拉,模型被迫去迁就离群点。其二,多分类时把类别编码成 1、2、3 会强行引入「2 在 1 和 3 中间」的顺序,而类别本来没有顺序。第 8 页给出理想替代:模型输出离散类别,损失直接数「错了几次」(\(L=\sum_n\delta(f(x^n)\ne\hat y^n)\)),并点名 perceptron、SVM 属于这条路线,但本讲不走这条。

本讲走的是生成式路线:先分别估计每个类别的数据长什么样(\(P(x|C_1)\)、\(P(x|C_2)\)),再乘上类别先验,用贝叶斯公式反推 \(P(C_1|x)\)。直观上就是「哪一类更可能生成眼前这个点,就判给哪一类」。第 9 页用两个盒子的抽球问题热场:已知先验与条件概率,反推「抽到蓝球来自盒子 1」的概率,公式与分类完全同构。

二、核心知识:先验、似然、后验

贝叶斯公式。 第 10 页:

$$P(C_1\mid x)=\frac{P(x\mid C_1)P(C_1)}{P(x\mid C_1)P(C_1)+P(x\mid C_2)P(C_2)}.$$

需要估的量只有四个:\(P(C_1)\)、\(P(C_2)\)、\(P(x|C_1)\)、\(P(x|C_2)\)。

先验。 第 11 页:用 ID < 400 的 Water 与 Normal 做训练,其余做测试,得到 79 只 Water、61 只 Normal,于是

$$P(C_1)=\frac{79}{79+61}=0.56,\qquad P(C_2)=\frac{61}{140}=0.44.$$

似然:高斯假设。 第 13 页只取 Defense 与 SP Def 两维,把 79 个点画在平面上,假设它们从某个高斯分布采样。第 14 页给出密度:

$$f_{\boldsymbol{\mu},\Sigma}(\mathbf{x})=\frac{1}{(2\pi)^{D/2}}\frac{1}{\lvert\Sigma\rvert^{1/2}} \exp\!\left(-\frac12(\mathbf{x}-\boldsymbol{\mu})^{\top}\Sigma^{-1}(\mathbf{x}-\boldsymbol{\mu})\right),$$

\(\mathbf{x},\boldsymbol{\mu}\in\mathbb{R}^{D}\)、\(\Sigma\in\mathbb{R}^{D\times D}\) 对称正定。第 15 页用四张图说明 \(\boldsymbol{\mu}\) 控制中心、\(\Sigma\) 控制形状与朝向。

最大似然。 第 17–18 页:任意一组 \((\boldsymbol{\mu},\Sigma)\) 都能「生成」这 79 个点,只是概率不同。似然定义为

$$L(\boldsymbol{\mu},\Sigma)=\prod_{n=1}^{79}f_{\boldsymbol{\mu},\Sigma}(\mathbf{x}^{n}),$$

取使它最大的参数,解出来就是样本均值与样本协方差:

$$\boldsymbol{\mu}^{*}=\frac{1}{79}\sum_{n=1}^{79}\mathbf{x}^{n},\qquad \Sigma^{*}=\frac{1}{79}\sum_{n=1}^{79}(\mathbf{x}^{n}-\boldsymbol{\mu}^{*})(\mathbf{x}^{n}-\boldsymbol{\mu}^{*})^{\top}.$$

(这里分母是 \(N\) 而不是 \(N-1\),因为是最大似然解,不是无偏估计;数据多时差别可忽略。)

讲义算出的参数。 第 16、19 页:Water 类 \(\boldsymbol{\mu}_1=(75.0,71.3)\)、\(\Sigma_1=\begin{bmatrix}874&327\\327&929\end{bmatrix}\);Normal 类 \(\boldsymbol{\mu}_2=(55.6,59.8)\)、\(\Sigma_2=\begin{bmatrix}847&422\\422&685\end{bmatrix}\)。第 20 页把它们代回贝叶斯公式,\(P(C_1|x)>0.5\) 判 Water。

三、关键推导:从贝叶斯公式到一条直线(附真实数值)

这一步是整讲的骨架,也是「生成式模型为什么最后长成 logistic regression」的答案。把两个高斯密度代入后验:

$$P(C_1\mid x)=\frac{1}{1+\exp(-z)}=\sigma(z),\qquad z=\ln\frac{P(x\mid C_1)P(C_1)}{P(x\mid C_2)P(C_2)}.$$

第 29–31 页把 \(z\) 拆开。若两类共享同一个协方差矩阵 \(\Sigma_1=\Sigma_2=\Sigma\),二次项 \(x^{\top}\Sigma^{-1}x\) 两边相消,只剩线性项:

$$z=\underbrace{(\boldsymbol{\mu}_1-\boldsymbol{\mu}_2)^{\top}\Sigma^{-1}}_{\mathbf{w}^{\top}}\mathbf{x} \underbrace{-\frac12\boldsymbol{\mu}_1^{\top}\Sigma^{-1}\boldsymbol{\mu}_1+\frac12\boldsymbol{\mu}_2^{\top}\Sigma^{-1}\boldsymbol{\mu}_2+\ln\frac{N_1}{N_2}}_{b}.$$

维度:\(\mathbf{x},\boldsymbol{\mu}_i\in\mathbb{R}^{D}\),\(\Sigma^{-1}\in\mathbb{R}^{D\times D}\),所以 \(\mathbf{w}\in\mathbb{R}^{D}\)、\(b\in\mathbb{R}\),\(z\) 是标量。共享协方差把二次判别面压成了线性判别面,这是第 24 页说「boundary is linear」的原因。

用讲义的数算一遍(复习补充)。 第 23 页给出共享协方差的估计:

$$\Sigma=\frac{79}{140}\Sigma_1+\frac{61}{140}\Sigma_2 =\begin{bmatrix}862.236&368.393\\368.393&822.686\end{bmatrix}.$$

代入 \(\boldsymbol{\mu}_1=(75.0,71.3)\)、\(\boldsymbol{\mu}_2=(55.6,59.8)\)、\(N_1/N_2=79/61\),得

$$\mathbf{w}=(0.020437,\ 0.004827),\qquad b=-1.392388.$$

于是 \(z=0.020437\,x_{\text{def}}+0.004827\,x_{\text{spdef}}-1.392388\)。取 \(\mathbf{x}=(75,71)\)(Water 的均值附近),\(z=0.4831\)、\(P(C_1|x)=0.6185\);取 \((55,60)\)(Normal 均值附近),\(z=0.0213\)、\(P=0.5053\)——刚好在边界附近。两均值的中点 \(\frac12(\boldsymbol{\mu}_1+\boldsymbol{\mu}_2)=(65.3,65.55)\) 处,\(z=0.258574\),而 \(\ln(79/61)=0.258574\),两个数完全相等:先验只平移边界,不改变斜率。解 \(z=0\) 得边界经过 \((54.20,58.97)\),落在 Normal 均值的外侧——先验更大的 Water 类把边界往 Normal 那边推,符合「少数类要多让一点」的直觉。

这个结果也解释了讲义第 33 页的提问:「生成式模型先估 \(N_1,N_2,\boldsymbol{\mu}_1,\boldsymbol{\mu}_2,\Sigma\),然后得到 \(w,b\);那为什么不直接找 \(w,b\)?」——后者就是下一讲的 logistic regression。两条路给出同一个函数形式,但假设不同:生成式假设了高斯与共享协方差,判别式不假设分布、直接优化条件概率。

四、原讲义例子:47% → 54% → 73%

第 21 页:只用 Defense、SP Def 两维,测试准确率 47%,接近乱猜;把七项属性全用上(\(\boldsymbol{\mu}\) 是 7 维、\(\Sigma\) 是 \(7\times7\)),准确率 54%,仍然不好。第 22–24 页改成两类共享一个 \(\Sigma\),参数量从两个协方差矩阵降为一个,准确率跳到 73%,并且决策边界变成直线。

这个跳跃值得停一下:共享协方差是更强的假设(限制了两类分布的形状相同),按理说偏差更大,但结果更好。原因是 79 个样本估一个 \(7\times7\) 协方差(28 个自由参数)已经很不稳,估两个更不稳;共享之后每个参数见到的数据翻倍,方差大降。第 23 页还给了共享 \(\Sigma\) 的最大似然解是两类协方差的加权平均,权重就是类别样本比例——这正是「用所有数据估一个共同形状」的写法。

第 26 页补了一句方法论:\(P(x|C_1)\) 不一定要用高斯,你可以用任何分布;若假设各维独立,就退化成 Naive Bayes;二值特征可以用伯努利。第 25 页把整件事套回三步框架:模型是 \(P(C_1|x)\) 这个函数族, goodness 是似然,找最优就是最大似然。

五、易错点

  1. 47% 与 54% 不能直接比「模型好坏」。 前者只用 2 维、后者用 7 维,特征集不同;54% 说明「多特征 + 各自协方差」在样本少时反而更差,不是「7 维没用」。
  2. 共享 \(\Sigma\) 是假设,不是数据结论。 它把参数量从 \(2\times28\) 降到 28,换来了 73%,但也限制了两类分布形状相同;若真实分布形状差异很大,这个假设会带来偏差。
  3. 分类不能当回归做。 第 7 页的两个理由(惩罚「太正确」的样本、多类别的虚假顺序)在任何数据集上都成立;分类要用能表达「类别」的损失,如交叉熵或 0-1 损失。
  4. 先验会平移边界。 由上面的推导,\(\ln(N_1/N_2)\) 只进 \(b\);若测试集类别比例与训练集不同,用训练先验就会系统性偏向多数类,必要时按实际先验校正。
  5. 高斯假设只是工具。 第 26 页明说可以换分布;后验取 sigmoid 的形式在「共享协方差的高斯」下是精确的,换分布后不一定还成立。
  6. 生成式与判别式的假设不同。 生成式先估 \(P(x|C)\) 再算 \(P(C|x)\),判别式直接建模 \(P(C|x)\);前者在数据少时可以利用分布假设,后者在大数据下通常更稳。这是两条建模路线的差别,不是「谁更正确」。
  7. 分母 \(N\) 与 \(N-1\)。 最大似然协方差除以 \(N\);若用无偏估计要乘 \(N/(N-1)\),讲义的公式是前者,抄公式时别混。

六、自测

Q1. 为什么把分类当回归会「惩罚太正确的样本」?

参考答案

因为回归损失只看输出与数值标签的距离。标签为 1 的点若被预测成 5,损失 \((5-1)^2\) 很大,梯度会把决策面往这个点拉,即使它已经被分对。分类关心的是「在边界哪一侧」,不关心离边界多远,所以用 0-1 损失或交叉熵更合适。

Q2. 两类共享 \(\Sigma\) 之后,为什么决策边界是直线?

参考答案

后验是 \(\sigma(z)\),而 \(z=\ln\frac{P(x|C_1)P(C_1)}{P(x|C_2)P(C_2)}\)。高斯密度取对数后是 \(x\) 的二次型;两类的 \(\Sigma\) 相同时,二次项 \(x^\top\Sigma^{-1}x\) 完全相消,只剩 \(x\) 的一次项与常数,所以 \(z=\mathbf{w}^\top x+b\) 是线性函数,\(z=0\) 是超平面。

Q3. 用讲义的数,\(P(C_1|x)\) 在两类均值中点处等于多少?这个值说明什么?

参考答案

\(z=\ln(79/61)=0.2586\),\(P=\sigma(0.2586)=0.5643\),不是 0.5。说明先验不等时边界不落在中点,而是往样本少的 Normal 类一侧偏移;先验只改变截距,不改变斜率。

Q4. 只有 79 个 Water 样本,却要估 \(7\times7\) 协方差,会有什么问题?

参考答案

\(7\times7\) 对称矩阵有 28 个自由参数,79 个样本尚可估但方差大;若两类各估一个,等于用 79 和 61 个样本分别估 28 个参数,估计很不稳,容易过拟合。共享一个 \(\Sigma\) 用 140 个样本估 28 个参数,方差明显下降,这正是 54%→73% 的原因。

Q5. 生成式模型和判别式模型的核心差别是什么?

参考答案

生成式先对每类建模 \(P(x|C)\) 与先验 \(P(C)\),再用贝叶斯公式得到 \(P(C|x)\);判别式直接建模 \(P(C|x)\) 或决策边界。前者带分布假设、参数有概率意义、数据少时可用先验知识;后者不假设分布、直接优化分类目标,数据多时通常更准。

七、30 秒速记

分类别当回归(惩罚太正确、类别无顺序)→ 生成式:先验 \(79/140=0.56\)、\(61/140=0.44\) → 高斯 + 最大似然:\(\mu\) 是均值、\(\Sigma\) 是协方差 → 两类各自 \(\Sigma\):47%(2 维)/54%(7 维)→ 共享 \(\Sigma\):73%,边界变直线 → 后验 \(=\sigma(\mathbf{w}^\top x+b)\),\(\mathbf{w}=(\mu_1-\mu_2)^\top\Sigma^{-1}\),\(b\) 含 \(\ln(N_1/N_2)\) → 直接找 \(w,b\) 就是下一讲的 logistic regression。

八、和其他 P 的关系

来源与说明

基于对应官方讲义整理,未取到完整视频字幕;不冒充逐字稿。