03 · 第 3 讲:生成模型与生成式分类

← 返回课程目录

来源说明:本文由 AI 根据课程课件整理生成。学习和引用时请结合原课件核实。

本文目录

本文最后更新于 2026年11月9日 下午

北京大学《机器学习概论》(2026 秋)的课程笔记。

第三讲:假设要根据一封邮件里出现的词判断它是不是垃圾邮件。可以先问“垃圾邮件通常会出现什么词”,再反过来判断新邮件属于哪一类。

这一讲的生成式分类,就是把这个想法写成概率模型。

第 1 章:先建联合分布,再分类

生成式分类器把 p(x,y)p(x,y) 分解为 p(y)p(x∣y)p(y)p(x\mid y)。预测时用 p(y=c∣x)∝p(y=c)p(x∣y=c)p(y=c\mid x)\propto p(y=c)p(x\mid y=c)。

类别先验 p(y)p(y) 告诉我们哪一类常见;类条件分布 p(x∣y)p(x\mid y) 告诉我们该类样本长什么样。它能处理缺失特征、生成样本,也能回答比分类更广的问题;代价是必须对数据分布作出假设。

第 2 章:朴素贝叶斯:用独立假设换取可估计性

朴素贝叶斯假设给定类别后各维特征条件独立:p(x∣y=c)=∏dp(xd∣y=c)p(x\mid y=c)=\prod_dp(x_d\mid y=c)。现实中词、像素等特征往往相关,所以这是建模近似而非事实。

它使参数量从组合爆炸降到按维估计,数据有限时很实用。

二值特征可用伯努利分布,离散多值特征可用类别分布。分类时最好计算 log⁡p(y=c)+∑dlog⁡p(xd∣y=c)\log p(y=c)+\sum_d\log p(x_d\mid y=c),避免许多小概率相乘造成下溢。

若某个条件从未在训练集中出现,MLE 会给出零概率,进而让整类得分归零;Dirichlet/Beta 先验带来的平滑可以缓解这个问题。加一平滑可以理解成:每个结果在观察数据前先有一个伪计数。

第 3 章:高斯判别分析

连续特征可设 x∣y=c∼N(μc,Σc)x\mid y=c\sim\mathcal N(\mu_c,\Sigma_c)。类别均值由该类样本平均估计,协方差刻画形状。

如果各类协方差不同,判别边界通常是二次的(QDA);若共享同一个协方差,二次项相消,得到线性判别边界(LDA)。这也说明“线性”不是说每一类的数据服从一条直线,而是比较类别的判别函数对 xx 呈线性。

高维、小样本时每类协方差难以准确估计,甚至不可逆。共享协方差、对角协方差或在协方差中加入收缩项,都是减少自由度的办法。

最近类中心分类器只看样本离各类均值的距离;若采用共享协方差的 Mahalanobis 距离,它与高斯模型有紧密联系。

课件末尾的 Fisher 判别则找投影 ww,使类间散度相对类内散度尽量大:max⁡wwTSBw/(wTSWw)\max_w w^TS_Bw/(w^TS_Ww)。

第 4 章:如何选类别

取最大后验类别适用于各类错误代价相同的 0–1 损失。若漏诊和误报代价不同,应最小化条件风险 R(a∣x)=∑yL(a,y)p(y∣x)R(a\mid x)=\sum_yL(a,y)p(y\mid x)。这个决策步骤与估计概率本身不同。

第 5 章:朴素贝叶斯参数怎么从计数得到

记 NcN_c 为类别 cc 的样本数,Nd,k,cN_{d,k,c} 为类别 cc 中第 dd 维取值 kk 的次数。

类别先验的 MLE 为 π^c=Nc/N\hat\pi_c=N_c/N;类别条件下的类别特征概率为 θ^d,k,c=Nd,k,c/Nc\hat\theta_{d,k,c}=N_{d,k,c}/N_c。

若每个取值的 Dirichlet 先验参数均为 α\alpha,后验预测是 (Nd,k,c+α)/(Nc+Kdα)(N_{d,k,c}+\alpha)/(N_c+K_d\alpha),其中 KdK_d 为该维可能取值数。

分子加一时分母也要加 KdK_d;只在分子加一不能保证概率和为 1。

例如两类邮件中,“中奖”一词在垃圾邮件里出现多、正常邮件里少,这个词会提高垃圾邮件的后验概率;但如果它在某类训练样本中从未出现,未平滑的乘积概率会直接归零。

实际分类比较对数得分即可,公共的归一化因子 p(x)p(x) 不影响 arg⁡max⁡\arg\max。

第 6 章:为什么共享协方差产生线性边界

设 p(x∣y=c)=N(x;μc,Σ)p(x\mid y=c)=\mathcal N(x;\mu_c,\Sigma),p(y=c)=πcp(y=c)=\pi_c。

去掉对类别相同的项,对数判别分数为 gc(x)=μcTΣ−1x−12μcTΣ−1μc+log⁡πcg_c(x)=\mu_c^T\Sigma^{-1}x-\frac12\mu_c^T\Sigma^{-1}\mu_c+\log\pi_c。

这里 xTΣ−1xx^T\Sigma^{-1}x 在所有类别中相同,比较时相消,所以两类分数相等的边界是超平面。若每类用自己的 Σc\Sigma_c,二次项不能相消,通常得到二次边界。

估计参数时 μ^c=1Nc∑n:yn=cxn\hat\mu_c=\frac1{N_c}\sum_{n:y_n=c}x_n;共享协方差可对各类中心化残差合并估计。若 NcN_c 相对维数 DD 太小,协方差会不稳定,可采用共享、对角或收缩估计。

最近中心分类是更强的简化:忽略丰富的协方差信息,仅比较与均值的距离。

第 7 章:Fisher 投影与概率分类的区别

二分类时,令类间散度 SB=(μ1−μ0)(μ1−μ0)TS_B=(\mu_1-\mu_0)(\mu_1-\mu_0)^T,类内散度为中心化样本的散度和 SWS_W。

Fisher 方法最大化 J(w)=wTSBw/(wTSWw)J(w)=w^TS_Bw/(w^TS_Ww),即让投影后两类中心远、各类内部紧。若 SWS_W 可逆,方向与 SW−1(μ1−μ0)S_W^{-1}(\mu_1-\mu_0) 成比例。

这个方法直接寻找有区分力的方向;前述高斯模型则从概率分布出发。

第 8 章:一个完整的两类计算例子

假设两类先验 p(A)=0.6,p(B)=0.4p(A)=0.6,p(B)=0.4,两个二值特征在类条件下独立。

对样本 x=(1,1)x=(1,1),设 p(x1=1∣A)=0.8,p(x2=1∣A)=0.5p(x_1=1\mid A)=0.8,p(x_2=1\mid A)=0.5;类 B 下分别为 0.3,0.70.3,0.7。

未归一化分数为 sA=0.6×0.8×0.5=0.24s_A=0.6\times0.8\times0.5=0.24,sB=0.4×0.3×0.7=0.084s_B=0.4\times0.3\times0.7=0.084。

因此 p(A∣x)=0.24/(0.24+0.084)≈0.741p(A\mid x)=0.24/(0.24+0.084)\approx0.741。

若按 0–1 损失决策,选择 A;如果把 A 判成 B 与把 B 判成 A 的代价不同,就应比较两种动作的条件风险,而不是直接拿 0.5 当阈值。

第 9 章:分布假设带来的好处与代价

生成模型估计联合分布后,面对缺失的某个特征可以对它求和或积分,而不是简单把缺失值当零。例如朴素贝叶斯在某维未观测时,分类分数只乘可见维度对应的概率。代价是类条件独立与高斯形状若严重失真,后验概率可能不准。

高斯判别的协方差越灵活,需要估计的参数越多:对称 D×DD\times D 协方差有 D(D+1)/2D(D+1)/2 个自由度,这解释了高维小样本时为什么需要共享或收缩。

朴素贝叶斯与高斯判别都先描述“某类会产生什么样的数据”,再反推类别。下一讲换一个方向:直接学习给定样本时的类别概率。

补充:平滑和判别边界各解决什么

计数型朴素贝叶斯遇到未见词时,原始 MLE 会给出零概率;Dirichlet 先验或加一平滑是在参数估计阶段避免这一问题。GDA 的共享协方差、类别独立协方差则是在控制边界复杂度:前者给线性边界,后者可给二次边界。两类选择都应由数据量和验证表现决定。


第 3 讲:生成模型与生成式分类
https://yjyxfcy.github.io/2026/11/03/itml3/
作者
Yjy
发布于
2026年11月3日
更新于
2026年11月9日
许可协议