讲解稿 · 第 06 章 第 01 节 · 经典机器学习¶
口播时长:约 18 分钟|建议语速:中速,公式处停两拍|字数:约 4200 字
承 Ch05 §05 信息论(熵/KL/互信息)→ Ch06 §01 经典机器学习 → Ch06 §02 梯度机器学习
导语(约 80 秒)¶
先讲一个 1996 年的故事。
那年夏天,AT&T 的邮件系统被一种叫"廉价邮资"的垃圾邮件打爆——邮件内容里大量出现 cheap、viagra、free 这几个词。两位工程师 Mehran Sahami 和 当时还在斯坦福的 Daphne Koller 没有去写规则,而是从用户标注的几千封邮件里学出每个词和"垃圾"两个标签之间的统计关系:垃圾邮件里 viagra 出现的条件概率是正常邮件里的 80 倍以上,叠上一个先验就足以把绝大多数垃圾邮件拦下。
这就是朴素贝叶斯分类器,机器学习里最简单、训练最快、效果却往往惊人的算法之一。它背后用到的就是 Ch05 §04 贝叶斯公式 + Ch05 §05 信息论中的熵。今天我们沿着这条线索,把 Ch05 沉淀下来的概率与信息论工具,落地到一组不靠梯度下降、靠闭式解或启发式搜索的经典算法:朴素贝叶斯、k 近邻、决策树、随机森林、AdaBoost、K 均值、GMM、SVM。
复习昨日 & 今日路线(约 50 秒)¶
Ch05 §05 我们定义了离散熵 \(H(X)=-\sum_k p_k\log_2 p_k\)(单位 bit),连续熵 \(h(X)=-\int f(x)\log f(x)\,dx\)(单位 nat),互信息 \(I(X;Y)=H(X)-H(X|Y)\),KL 散度 \(D_{KL}(P\|Q)\)。这些度量刻画的是"分布有多不确定"、"两个分布差多远"。
今天,熵会作为决策树的不纯度度量出现:父节点熵减去子节点加权熵,就是信息增益。KL 散度会作为 GMM 训练的对数似然差出现:EM 的 M 步其实在最小化一个加权 KL。互信息则成为特征选择的天然准则——保留高互信息的特征,丢掉接近零的。
符号表(Ch06 首次出现) \(\lambda\) — 正则化系数(Ch06 §02 起使用);本书也用 \(\lambda\) 表特征值,Ch02 见到,首次出现时已用上下文区分。 \(\alpha\) — 本节内多义:AdaBoost 弱分类器权重 (§核心概念五)、学习率别名 (Ch06 §02),首次出现必标。 \(\gamma\) — SVM RBF 核带宽(§核心概念六),实数域,单位为特征距离倒数的平方。 \(C\) — SVM 软间隔惩罚系数(§核心概念六),越大越不容忍越界。
路线:监督概率 → 监督几何 → 监督集成 → 无监督聚类 → 间隔与核。下一节 §02 我们进入梯度方法与正则化,把今天的闭式/启发式方法升级为现代深度学习的基础。
核心概念一 · 监督学习的两种范式:生成式 vs 判别式(约 2 分钟)¶
直觉。 学分类有两种思路。一种是先学"每一类长什么样",见到新样本看看它像哪一类;另一种是直接学"两类之间怎么分",不关心每一类长什么样。前者能生成新样本("画一只新的猫"),后者只看边界("判断这是不是猫")。
定义。 生成式模型(generative)学的是联合分布 \(P(x,y)\),等价于学 \(P(x\mid y)\cdot P(y)\)。它能回答 "\(P(x\mid y=\text{猫})\) 是什么",也能采样出新数据。判别式模型(discriminative)学的是条件分布 \(P(y\mid x)\),只关心给定 \(x\) 时各类别的后验。
例子。 Ch05 §04 贝叶斯例子:垃圾邮件检测中,朴素贝叶斯对每个类别建模 \(P(\text{词}\mid\text{类别})\),是生成式;逻辑回归直接学 \(P(\text{类别}\mid\text{词})\),是判别式。两者在同一数据上准确率往往很接近,但生成式对类别失衡更鲁棒(因为先验可调),判别式在数据量大时通常更准。
反例。 不要把"用了贝叶斯公式"等同于生成式——朴素贝叶斯虽然写的是 \(P(y\mid x)\propto P(x\mid y)P(y)\),但训练目标是判别式的"后验最大化"也是它的副产品。真正的区分点在于模型是否学到了完整的 \(P(x\mid y)\)——若学到了,可用来生成新样本;若只学决策面,就只用来判别。
一句话总结。 生成式学"怎么画",判别式学"怎么分";两者差别不在公式形式,在是否持有完整的 \(P(x\mid y)\)。
核心概念二 · 朴素贝叶斯与拉普拉斯平滑(约 2.5 分钟)¶
直觉。 假设你已经知道"邮件是垃圾邮件"这一前提下,词与词之间相互独立,于是整封邮件的似然就是各词出现概率的连乘。再乘一个"垃圾邮件占比"作为先验,归一化即得后验。这就是朴素贝叶斯。
定义。 给定类别 \(C_k\),样本 \(x=(x_1,\dots,x_n)\),贝叶斯公式给出
"朴素"在于 \(P(x\mid C_k)=\prod_i P(x_i\mid C_k)\),即给定类别后各特征条件独立。预测时 \(P(x)\) 对所有类相同,因此只需挑出让分子最大的类:
先验 \(P(C_k)\) 用训练集类别频率估计;似然 \(P(x_i\mid C_k)\) 视特征类型取三种形式之一——多项式(离散计数,文本分类标配)、高斯(连续测量值,\(P(x_i\mid C_k)=\frac{1}{\sqrt{2\pi\sigma_{ik}^2}}\exp\left(-\frac{(x_i-\mu_{ik})^2}{2\sigma_{ik}^2}\right)\))、伯努利(二值特征"出现/不出现")。
例子。 一次手算就能验:两类别等先验 \(P(C_1)=P(C_2)=0.5\);两特征独立;\(P(x_1\mid C_1)=0.8\),\(P(x_1\mid C_2)=0.2\),\(P(x_2\mid C_1)=0.7\),\(P(x_2\mid C_2)=0.3\)。观察 \(x_1=1,x_2=1\):
归一化得 \(P(C_1\mid x)=0.280/0.310\approx 0.903\),\(P(C_2\mid x)\approx 0.097\)。数值三步内可验,结论 C1 胜出。
反例与平滑。 训练集若某词从未与某类共现,连乘直接归零。拉普拉斯平滑对每个"特征值-类别"对加 1:
例:训练集 10 封邮件、\(V=2\) 个特征值、\(\alpha=1\):原本 \(\text{count}=0\) 改成 \(1/(10+2)=0.0833\),不再吞掉整个后验。注意 \(\alpha\) 在这里是平滑强度(区别于显著性水平 Ch04 与学习率别名 Ch06 §02)。
一句话总结。 朴素贝叶斯 = 贝叶斯公式 + 特征条件独立 + 三种似然变体;遇到零概率,用拉普拉斯加 1 救命。
核心概念三 · 决策树:信息增益驱动的不纯度切分(约 3 分钟)¶
直觉。 "二十个问题"游戏里,每一步都问那个能把可能性缩到最小的 yes/no。决策树在每个内部节点对同一特征选一个阈值,样本按答案走向左右叶。叶子是预测:分类用多数类,回归用均值。
定义。 三种不纯度度量,根节点到子节点,下降越大越值得分裂。
基尼不纯度(Gini impurity):
若节点纯(即 100/0),\(\text{Gini}=1-1=0\);二分类完全均衡(50/50),\(\text{Gini}=1-(0.5^2+0.5^2)=0.5\)——这就是最大值。数学校验:\(1-0.25-0.25=0.5\) ✓。
信息熵(来自 Ch05 §05,单位 bit):
纯节点 \(H=0\) bit;二分类 50/50,\(H=-(0.5\log_2 0.5+0.5\log_2 0.5)=1\) bit——这是单个二分类节点熵的上界。注意:若用自然对数,单位变为 nat;底数换算系数 \(\log_2 e\approx 1.443\),本节沿用 bit。
信息增益(information gain):
算法在每个节点贪心挑 IG 最大的分裂;这是局部最优,实践中已经够用。
例子。 一个 8 样本节点:5 正 3 负,父节点熵
按某特征分裂后左子 4 正 0 负(\(H_L=0\) bit),右子 1 正 3 负(\(H_R=-(0.25\log_2 0.25+0.75\log_2 0.75)\approx 0.8113\) bit)。代入:
约 0.549 bit 增益,分裂值得。数字三步内可验。
反例。 不加约束的树会一直分裂到每个叶都纯——把训练集背下来,这就是过拟合。预剪枝:限制最大深度、每叶最少样本数、分裂所需最小 IG;后剪枝:先长完整树,再用验证集砍掉不带来提升的分支。
一句话总结。 不纯度越低 → 节点越纯;熵单位 bit;IG 越大分裂越值得;不剪枝的树只是把训练集背下来。
核心概念四 · 集成与随机森林:Bagging 降方差(约 2.5 分钟)¶
直觉。 单棵决策树一抖动数据就长成完全不同的形状。能不能训 100 棵不同的树,预测时取多数票,把抖动"平均"掉?
定义。 Bagging(bootstrap aggregating)在数据的不同 bootstrap 子集(有放回抽样,每个样本被选概率约 63.2%)上训练多个模型,最终预测取均值(回归)或多数票(分类)。随机森林在 Bagging 基础上再加一层随机:每次分裂时,树只考虑随机子集的特征(通常从 \(d\) 个中抽 \(\sqrt d\) 个),进一步让树之间去相关。
例子。 三棵单树准确率都是 70%,若彼此独立投票,整体准确率近似 \(1-\sum_{k\ge 2}\binom{3}{k}0.3^k 0.7^{3-k}=1-(0.027+0.027+0.009)=0.973\)——但这只是独立性假设下的理想上限。注意:随机森林不是这个数值,它的好处来自"去相关 + 平均",不是独立假设。
反例。 把 Bagging 当作万能降方差药:它对单模型高方差(决策树、未剪枝深网络)效果最显著;对本身就低方差的高偏差模型(线性回归)几乎没有提升。Bagging 降的是方差(variance),不是偏差(bias)。
一句话总结。 Bagging = 数据采样 + 模型平均 + 特征采样(RF 特供)→ 降方差;它不解决欠拟合。
核心概念五 · AdaBoost:Boosting 降偏差与权重更新(约 2.5 分钟)¶
直觉。 Bagging 让多个模型"各看各的数据";Boosting 让多个模型"各看各的错"。前一个错得厉害的样本,下一个模型就给更大权重。
定义。 AdaBoost 给每个训练样本维护权重 \(w_i\),初始相等。训完一个弱学习器 \(h_t\)(通常是深度 1 的树桩)后,错误率
学习器权重
注意 \(\alpha\) 在这里是分类器权重(与 Ch04 显著性水平、Ch06 §02 学习率别名区分)。错分样本权重乘以 \(e^{\alpha_t}\),对分样本乘以 \(e^{-\alpha_t}\),归一化后进入下一轮。最终预测:
例子。 一次手算:\(\epsilon=0.3\),则 \(\alpha=\frac{1}{2}\ln(7/3)\approx 0.4236\);错分样本权重 × \(e^{0.4236}\approx 1.528\),对分样本权重 × \(e^{-0.4236}\approx 0.654\),权重比约 2.33。
反例。 Boosting 对噪声极其敏感——一个错标的样本会不断被加大权重,把后续学习器拖进"过拟合噪声"的死循环。这是 Boosting 在含噪标签数据上往往不如随机森林稳的原因。
一句话总结。 Boosting 顺序纠错 → 降偏差;AdaBoost 用 \(\alpha=\frac{1}{2}\ln\frac{1-\epsilon}{\epsilon}\) 调权;噪声标签会放大错分样本的伤害。
核心概念六 · K 均值与 GMM:从硬分配到软分配(约 2.5 分钟)¶
直觉。 给 \(n\) 个点、目标簇数 \(K\),交替做两件事:把每个点归到最近的簇心;再用该簇所有点的均值更新簇心。重复直到分配不再变。
定义. K 均值最小化簇内平方和(inertia, 又称 J):
K-Means++ 初始化让第一个簇心随机选,之后每个新簇心按"到当前最近簇心的平方距离"为概率抽取。
例子. 4 个点 \((0,0),(1,0),(0,1),(10,10)\),初始簇心 \((0,0)\) 与 \((10,10)\)。分配:前 3 点归簇 1,第 4 点归簇 2。更新:\(\mu_1\) 变成 \(((0+1+0)/3,(0+0+1)/3)\approx (0.33,0.33)\);\(\mu_2\) 不动 = \((10,10)\)。数字三步内可验。
GMM 放宽 K 均值的两个假设:每个簇是高斯 \(\mathcal N(\mu_k,\Sigma_k)\),混合权重 \(\pi_k\) 之和为 1:
每个点得到软分配:它属于第 \(k\) 簇的概率叫"责任度"。EM 两步:E 步算责任度,M 步在固定责任度下更新 \(\mu_k,\Sigma_k,\pi_k\)。EM 保证每轮对数似然不降,收敛到局部极大。
反例. K 均值假设簇是球形且大小接近——拉长的椭圆簇就会被切成奇怪的几块。GMM 允许每个簇有自己的协方差矩阵,能描述椭圆,但仍假设每个分量都是高斯,重尾分布下不适用。空簇问题(更新步出现 0/0)要靠最远点重初始化或随机重抽补救。
一句话总结. K 均值 = 硬分配 + 球形假设;GMM = 软分配 + 椭圆分量;都依赖 EM 风格的局部优化 → 初始值敏感。
核心概念七 · SVM 最大间隔与核技巧(约 3 分钟)¶
直觉. 线性可分时,能把两类分开的超平面有无数条。SVM 挑"两侧最近点距离之和"最大的那条——最大间隔最稳,因为边界离两边都最远。
定义. 线性分类器 \(f(x)=w\cdot x+b\)。最大间隔原始问题:
这是凸二次规划,全局唯一解,无需担心局部极小。最优解里只有那些 \(y_i(w\cdot x_i+b)=1\) 的点真正决定边界,叫支持向量;其他训练点删掉也不影响。
例子. 两个一维点 \(x_1=0,\,y_1=+1\) 与 \(x_2=2,\,y_2=-1\)。约束 \(b\ge 1\)、\(-2w-b\ge 1\)。取 \(b=1\),则 \(w\le -1\);令 \(w=-1\),间隔 \(2/\|w\|=2\)。数字三步内可验。
软间隔. 真实数据几乎不可分。引入松弛 \(\xi_i\ge 0\):
\(C\) 大 → 严罚错分(更贴数据、可能过拟合);\(C\) 小 → 间隔更宽、更正则化。
核技巧. 很多数据在原空间线性不可分,映到高维就分得开。RBF 核
等价于映到无穷维再做点积。参数 \(\gamma\) 控制单个训练点的影响半径:\(\gamma\) 大 → 边界弯曲、过拟合;\(\gamma\) 小 → 更平滑。注意 \(\gamma\) 是核带宽,与学习率、显著性均无关系。
反例. RBF 核在数据维度 \(d\) 与样本数 \(n\) 都很大时计算核矩阵 \(K\in\mathbb R^{n\times n}\) 成本 \(O(n^2)\),几乎不可用——这是 SVM 在深度学习兴起后退守"中小规模、高维稀疏"场景的原因。
一句话总结. SVM = 最大间隔 + 凸优化 + 核技巧;\(C\) 控软硬、\(\gamma\) 控核宽;大数据集是它的硬伤。
一个走完全程的例子 · 一封垃圾邮件的判定(约 3 分钟)¶
把所有概念串成一条 30 秒流水线。
场景. 训练集 100 封邮件:60 封正常、40 封垃圾。只有两个特征:是否含 viagra(二值)、是否含 free(二值)。模型选伯努利朴素贝叶斯(§核心概念二),遇到零概率用拉普拉斯平滑 \(\alpha=1,\,V=2\)(§核心概念二反例)。
训练估计. 平滑后先验 \(P(\text{正常})=(60+1)/(100+2)=0.5000\),\(P(\text{垃圾})=(40+1)/(100+2)=0.3333\)(剩余概率流向"其它"二分类中此处省略,仅展示两类比)。条件概率同理,估计出来比如 \(P(\text{viagra}=1\mid \text{垃圾})=0.78\),\(P(\text{viagra}=1\mid \text{正常})=0.05\)。
预测. 新邮件 \(x=(\text{viagra}=1,\,\text{free}=1)\)。后验分子:
垃圾 : 正常 \(\approx 28.6 : 1\)。判为垃圾。
特征选择的另一种思路. 若改成决策树(§核心概念三),基尼或熵会先把 viagra 选作根节点——因为它对标签的互信息最高(Ch05 §05 互信息定义 \(I(X;Y)\)),能把节点熵从父节点的 0.97 bit 降到 0.4 bit 左右。这就是熵→信息增益的实战落地。
为什么不用决策树? 树是判别式、能给概率,但遇到未见特征值要靠多数类 fallback;若训练集 free 全在垃圾邮件里,决策树"含 free"=垃圾,对新邮件泛化可能过激。朴素贝叶斯则因平滑反而更稳。
集成增益. 若把朴素贝叶斯、决策树、KNN 各跑一次并按 Bagging(§核心概念四)投票——KNN 这里没讲,作为延伸提示——整体准确率常比任一单模型高 1-3 个百分点。关键前提:三者错分样本不能完全重合。
整个流水线用到的元素:
| 步骤 | 用到的概念 | 章节位置 |
|---|---|---|
| 平滑零概率 | 拉普拉斯 \(\alpha\) | §核心概念二 |
| 训练先验 + 似然 | 贝叶斯公式 | §核心概念一 + Ch05 §04 |
| 选分裂特征 | 熵 / 基尼 / IG | §核心概念三 + Ch05 §05 |
| 多模型融合 | Bagging 投票 | §核心概念四 |
| 软分类边界(备选) | SVM 间隔 | §核心概念七 |
易错点回头看(约 80 秒)¶
第一条:很多人以为"用了贝叶斯公式就是生成式",其实判定关键是是否学到了完整的 \(P(x\mid y)\)。 朴素贝叶斯在预测时只看 \(P(y\mid x)\),但训练阶段它真的估出了每一类下每个特征的似然,因此能采样新样本,属于生成式。逻辑回归从头到尾没碰 \(P(x\mid y)\),纯判别式。区别在"持有的对象"而非"使用的公式"。
第二条:很多人以为"信息增益越大分裂越好",但 IG 偏向取值多的特征。 一个对每个样本都取唯一值的特征,IG 几乎可以是父节点的全部熵,但这毫无泛化意义。改进:用信息增益比(gain ratio)按特征的固有熵归一化,或直接限制每个特征的候选阈值数(C4.5 风格)。sklearn 默认的基尼虽然不带这种偏好,但同样要在最大深度、最小叶样本数上加约束。
第三条:很多人以为"K 均值一定收敛到全局最优",其实它只保证不下降。 簇心初始化不同,结局可能差很多。K-Means++ 是最便宜的解药:按"到当前最近簇心的平方距离"为概率抽样下一个簇心。空簇出现时,最远点重初始化(farthest-point reinit)比纯随机更稳。SVM 是为数不多有全局唯一解的算法——它的凸二次规划保证无局部极小,但这是它能享受的特例优势。
与下节的钩子(约 40 秒)¶
今天所有算法的训练目标要么是闭式解(朴素贝叶斯直接数频次,决策树贪心 IG,SVM 解二次规划),要么是启发式迭代(K 均值、EM)。我们几乎没有动过梯度。
但 Ch06 §02 的主角是梯度下降及其变体(SGD、Momentum、Adam)。逻辑回归的交叉熵损失(来自 Ch05 §05 KL 散度,\(D_{KL}(P\|Q)\) 中 \(P\) 是真标签、\(Q\) 是模型预测)要怎么求梯度?线性回归的均方误差(\(\text{MSE}=\frac{1}{n}\sum(y_i-\hat y_i)^2\))闭式解和梯度解为什么给出同一个 \(\hat w\)?当数据量爆炸到亿级,闭式解失效,随机梯度下降(SGD)怎么用单样本梯度逼近全量梯度、Ch05 §02 大数定律 + Ch05 §03 中心极限定理又如何保证它最终收敛?
下一节,我们把闭式与启发式让位给梯度与正则化。