「机器学习笔记10」贝叶斯学习——从逆向思维到简化现实的强大武器
一位病人因持续咳嗽前往就诊。医生的大脑会飞速进行一场无形的计算:
-
背景知识:当前是流感高发季,普通感冒很常见。
-
当前证据:病人有咳嗽、发烧症状。
-
可能性评估:如果是流感,出现这些症状的概率很高;如果是肺炎,概率稍低,但也可能;如果是更罕见的疾病,概率则极低。
-
综合判断:医生会结合背景知识和可能性评估,得出最可能的诊断。
这种结合经验(先验)与观察数据(似然) 做出最佳决策的思维,正是贝叶斯推理的核心。本文旨在阐述,如何将这种人类智慧赋予机器。
第一部分:贝叶斯定理——概率论中的“逆向思维”
我们从一个经典的癌症筛查例子开始。
已知信息:
-
P(癌症)=0.008:人群中有0.8%的人患此癌。(先验概率:在检测前的普遍认知)
-
P(阳性∣癌症)=0.98:如果确实患癌,检测结果为阳性的概率是98%。(似然度:检测技术的灵敏度)
-
P(阴性∣健康)=0.97:如果健康,检测结果为阴性的概率是97%。这意味着,P(阳性∣健康)=0.03。(假阳性率)
问题:如果一个人的检测结果是阳性,他真正患癌的概率是多少?即求 P(癌症∣阳性)。(后验概率:看到新证据后更新的信念)
贝叶斯定理公式:
P(癌症∣阳性)=P(阳性∣癌症)⋅P(癌症)P(阳性) P(\text{癌症} \mid \text{阳性}) = \frac{P(\text{阳性} \mid \text{癌症}) \cdot P(\text{癌症})}{P(\text{阳性})} P(癌症∣阳性)=P(阳性)P(阳性∣癌症)⋅P(癌症)
关键点:分母 P(阳性)表示检测结果呈阳性的总概率,它需要计算。阳性的结果来自两部分人:真阳性者 和 假阳性者。
-
真阳性贡献:P(阳性∣癌症)⋅P(癌症)=0.98×0.008=0.00784
-
假阳性贡献:P(阳性∣健康)⋅P(健康)=0.03×(1−0.008)=0.03×0.992=0.02976
-
所以,P(阳性)=0.00784+0.02976=0.0376
代入公式计算:
P(癌症∣阳性)=0.98×0.0080.0376≈0.2074≈20.74% P(\text{癌症} \mid \text{阳性}) = \frac{0.98 \times 0.008}{0.0376} \approx 0.2074 \approx 20.74\% P(癌症∣阳性)=0.03760.98×0.008≈0.2074≈20.74%
惊人结论与启示:
尽管检测技术看似精准,但一次阳性结果后真实患癌的概率只有约21%。原因是患癌的先验概率极低,导致健康人群中的假阳性数量(占比小但基数大)远远超过了真实患者数量。贝叶斯定理的魅力就在于,它能引导我们理性地权衡先验知识与新证据,避免直觉误导。一个贝叶斯诊断系统会建议“进一步复查”而非直接断定患癌,这体现了其智能。
第二部分:从诊断到分类:MAP与ML
现在我们将贝叶斯思想从“评估一个假设”推广到“在多个假设(类别)中做出选择”。
1. 极大后验概率估计(MAP)——最明智的选择
目标:在给定训练数据 D后,从所有可能的假设空间 H中,选出那个最有可能成立的假设 h。
方法:选择能使后验概率 P(h∣D) 最大的那个假设。这就是MAP。
hMAP=argmaxh∈H P(h∣D)=argmaxh∈H [P(D∣h)⋅P(h)] h_{MAP} = \underset{h \in H}{\arg\max} \, P(h \mid D) = \underset{h \in H}{\arg\max} \, \left[ P(D \mid h) \cdot P(h) \right] hMAP=h∈HargmaxP(h∣D)=h∈Hargmax[P(D∣h)⋅P(h)]
-
P(h):假设 h的先验概率。我们认为这个假设本身是否常见?
-
P(D∣h):似然度。如果 h是正确的,我们观察到当前数据 D的可能性有多大?
回溯癌症例子,我们有两个假设:h1=患癌和 h2=健康。
-
对于 h1:P(阳性∣癌症)⋅P(癌症)=0.98×0.008=0.0078
-
对于 h2:P(阳性∣健康)⋅P(健康)=0.03×0.992=0.0298
因为 0.0298>0.0078,所以 hMAP=健康。系统会判定该阳性结果更可能是一次假阳性。
2. 极大似然估计(ML)——退而求其次的实用选择
核心思想:如果我们对各个假设“谁更可能成立”完全没有先验概念(即我们认为所有假设 h的 P(h)都相等),那么MAP决策中的 P(h)就变成了一个常数项。在求最大值(argmax)时,常数项不影响比较结果。因此,决策规则简化为:只需选择那个能使似然度 P(D∣h) 最大的假设。这就是ML。
hML=argmaxh∈H P(D∣h) h_{ML} = \underset{h \in H}{\arg\max} \, P(D \mid h) hML=h∈HargmaxP(D∣h)
ML是MAP在“假设先验概率均匀分布”下的一个特例。
一个更直观的例子:警察破案
假设一个小镇发生了一起盗窃案,有两个嫌疑人:A(外来的惯偷)和B(本地的老好人)。
-
MAP视角:警察会考虑先验概率。A是惯偷,先验概率高;B是老好人,先验概率低。即使目前找到的证据(数据D)对两人都适用,警察也会更倾向于怀疑A。这就是MAP,它结合了“案底”和“现场证据”。
-
ML视角:如果一个完全不了解两人背景的法官来断案,他会忽略先验概率(认为P(A)=P(B))。他只关注“现场证据”。他会问:假设是A作案,现有证据出现的可能性有多大?假设是B作案,证据出现的可能性又多大?哪个可能性大,就判哪个。这就是ML。
数学上的经典案例:抛硬币
问题:一枚硬币抛了10次,有6次正面朝上。请问这枚硬币正面朝上的概率 p是多少?
我们用ML来估计。
-
数据D:10次抛掷,6次正面。
-
假设h:硬币正面朝上的概率 p可以是0到1之间的任何值。每个 p都是一个候选假设。
-
似然度 P(D∣h):对于某个具体的 p,出现“10次中6次正面”这一结果的概率由二项分布给出:
P(D∣p)=(106)p6(1−p)4
P(D \mid p) = \binom{10}{6} p^6 (1-p)^4
P(D∣p)=(610)p6(1−p)4
其中 (106)\binom{10}{6}(610) 是组合数,对于固定的数据是常数。
-
极大似然估计:我们要找到一个 p,使得上面的 P(D∣p)P(D \mid p)P(D∣p)最大。
-
为了计算方便,我们通常对似然函数取对数(因为对数函数是单调的,求最大值点不变),然后通过求导数找到极值点。
-
logP(D∣p)=log(106)+6logp+4log(1−p)\log P(D \mid p) = \log \binom{10}{6} + 6 \log p + 4 \log (1-p)logP(D∣p)=log(610)+6logp+4log(1−p)
-
对 p求导并令导数为零:ddp[logP(D∣p)]=6p−41−p=0\frac{d}{dp} [\log P(D \mid p)] = \frac{6}{p} - \frac{4}{1-p} = 0dpd[logP(D∣p)]=p6−1−p4=0
-
解得:6(1−p)=4p6(1-p) = 4p6(1−p)=4p => 6=10p6 = 10p6=10p => p=0.6p = 0.6p=0.6
-
结论:使得“10次抛掷出现6次正面”这一结果最可能出现的硬币概率是 p=0.6。因此,p的极大似然估计值就是 0.6。
ML的哲学:ML认为,我们观察到的数据就是最可能发生的数据。因此,我们应该选择那个能让已观察到的数据“看起来最不意外”的模型参数。它在机器学习中应用极其广泛,特别是在我们缺乏先验知识,或者认为数据量足够大可以抵消先验影响时。
第三部分:朴素贝叶斯分类器——化繁为简的实战利器
当分类对象变得复杂(如一封邮件有成千上万个词),计算 P(词1,词2,…,词n∣垃圾邮件)这样的联合概率会非常困难。
解决方案:“朴素”的简化假设。
核心假设:条件独立性。假设在给定邮件类别(如“垃圾邮件”)的条件下,每个词的出现与否是相互独立的。
这个假设在现实中通常不成立(比如“发票”和“报销”经常连带出现),但它能将复杂的联合概率计算分解为多个简单概率的乘积,从而让问题变得可解。
-
分解前:P(a1,a2,…,an∣vj)P(a_1, a_2, \ldots, a_n \mid v_j)P(a1,a2,…,an∣vj)(几乎无法直接估计)
-
分解后:P(a1∣vj)⋅P(a2∣vj)⋅…⋅P(an∣vj)=∏i=1nP(ai∣vj)P(a_1 \mid v_j) \cdot P(a_2 \mid v_j) \cdot \ldots \cdot P(a_n \mid v_j) = \prod_{i=1}^{n} P(a_i \mid v_j)P(a1∣vj)⋅P(a2∣vj)⋅…⋅P(an∣vj)=∏i=1nP(ai∣vj)
于是,MAP分类器就演变成了著名的朴素贝叶斯分类器:
vNB=argmaxvj∈V [P(vj)∏i=1nP(ai∣vj)] v_{NB} = \underset{v_j \in V}{\arg\max} \, \left[ P(v_j) \prod_{i=1}^{n} P(a_i \mid v_j) \right] vNB=vj∈Vargmax[P(vj)i=1∏nP(ai∣vj)]
为了数值计算的稳定性(避免多个小概率相乘导致浮点数下溢),我们通常取对数,将连乘变为连加:
vNB=argmaxvj∈V [logP(vj)+∑i=1nlogP(ai∣vj)] v_{NB} = \underset{v_j \in V}{\arg\max} \, \left[ \log P(v_j) + \sum_{i=1}^{n} \log P(a_i \mid v_j) \right] vNB=vj∈Vargmax[logP(vj)+i=1∑nlogP(ai∣vj)]
重要结论:如果“属性条件独立”的强假设在数据上成立,那么朴素贝叶斯分类器得到的结果 vNBv_{NB}vNB 就完全等价于理论上的最优分类器 vMAPv_{MAP}vMAP。尽管该假设常被违背,但朴素贝叶斯在文本分类等领域表现惊人,因为它更看重的是特征与类别之间的关联强度,而非特征之间的内在关系。
第四部分:最小描述长度原则(MDL)——奥卡姆剃刀的数学表达
奥卡姆剃刀:“如非必要,勿增实体”。即,在能解释通的情况下,简单的理论比复杂的更好。
MDL原则:最好的模型(假设 h),是那个能使 描述模型本身所需的信息量 加上 用这个模型描述数据所需的信息量 之和最小的模型。
min[L(h)+L(D∣h)] \min \left[ L(h) + L(D \mid h) \right] min[L(h)+L(D∣h)]
-
L(h)L(h)L(h):描述模型 h需要多少比特?复杂的模型(如1000层的神经网络)需要更长的描述。
-
L(D∣h)L(D \mid h)L(D∣h):用模型 h去编码数据 D,如果 h不完美,就需要额外编码误差。简单的模型可能误差大,需要更长的编码来描述误差。
MDL与MAP的深刻联系:
信息论告诉我们,一个事件概率越高,其最优编码长度越短(L(x)=−log2P(x)L(x) = -\log_2 P(x)L(x)=−log2P(x))。因此:
-
P(h)越高(模型越简单/常见),L(h)=−log2P(h)L(h) = -\log_2 P(h)L(h)=−log2P(h) 越短。
-
P(D∣h)越高(模型拟合越好),L(D∣h)=−log2P(D∣h)L(D \mid h) = -\log_2 P(D \mid h)L(D∣h)=−log2P(D∣h) 越短。
因此,MAP估计与MDL原则在数学上是等价的:
hMAP=argmaxh∈H P(D∣h)P(h)=argminh∈H [−log2P(D∣h)−log2P(h)]=argminh∈H [L(D∣h)+L(h)]=hMDL \begin{aligned} h_{MAP} &= \underset{h \in H}{\arg\max} \, P(D \mid h) P(h) \\ &= \underset{h \in H}{\arg\min} \, \left[ -\log_2 P(D \mid h) - \log_2 P(h) \right] \\ &= \underset{h \in H}{\arg\min} \, \left[ L(D \mid h) + L(h) \right] \\ &= h_{MDL} \end{aligned} hMAP=h∈HargmaxP(D∣h)P(h)=h∈Hargmin[−log2P(D∣h)−log2P(h)]=h∈Hargmin[L(D∣h)+L(h)]=hMDL
意义:贝叶斯学习框架内在地包含了对简单模型的偏好。它不是在盲目追求对训练数据的完美拟合,而是在追求简洁性与准确性之间的最佳权衡,这防止了过拟合,是机器学习模型泛化能力的理论基石。
总结
贝叶斯学习为机器提供了一套系统的、类似人类思维的推理框架:
-
尊重经验:通过先验概率融入背景知识。
-
注重证据:通过似然函数评估观察到的数据。
-
做出决策:通过MAP或ML原则选择最佳假设。
-
简化现实:通过朴素贝叶斯等假设,将复杂问题可行化。
-
追求简洁:通过MDL原则,自动规避不必要的复杂,提升泛化能力。
从疾病诊断到垃圾邮件过滤,贝叶斯方法让机器学会了如何像智者一样思考:不偏执于经验,不盲从于数据,而是在不确定性的世界中,进行理性的权衡与决策。