上一章我们凭借直觉得出了MLE的结论:扔硬币100次,70次正面,那么$\theta = 0.7$。简单粗暴,但真的对吗?
本章我们将用数学来证明这个直觉是正确的,并把MLE扩展到更复杂的分布。最后,我们会引入MLE的"升级版"——MAP(最大后验估计),它不仅看数据,还会结合你原本的信念。
伯努利分布的MLE
首先,建立似然函数 (Likelihood Function)。
假设我们要估计硬币正面的概率 $\theta$。数据是 $D = {H, H, T, H, ...}$。那么似然函数 $L(\theta)$ 是观察到当前数据的概率:
$$L(\theta) = \theta^{N_H} (1-\theta)^{N_T}$$
其中 $N_H$ 是正面次数,$N_T$ 是反面次数。
下一步,做对数化 (Log-Likelihood)。
不难注意到我们的似然函数中存在连乘,所以直接对 $L(\theta)$ 求导非常痛苦。
但因为 $\log$ 函数是单调递增的,最大化 $L(\theta)$ 等价于最大化 $\log L(\theta)$。所以我们可以将函数对数化。这能把乘法变成加法,把指数变成系数。
我们将 $\log L(\theta)$ 记为 $\ell(\theta)$:
$$\ell(\theta) = \log \left( \theta^{N_H} (1-\theta)^{N_T} \right)$$
利用对数律 $\log(AB) = \log A + \log B$ 和 $\log(A^n) = n \log A$:
$$\ell(\theta) = N_H \log \theta + N_T \log (1-\theta)$$
经过对数化后,我们就可以进行求导与优化 了。
因为我们关心极值点,所以对 $\theta$ 求偏导,并令其为 0:
$$\frac{\partial \ell(\theta)}{\partial \theta} = \frac{N_H}{\theta} - \frac{N_T}{1-\theta} = 0$$
$\log(1-\theta)$ 的导数是 $\frac{1}{1-\theta} \cdot (-1)$,主包之前作业就错了这里,基础数学全还给老师了,负号千万别漏了。
最后,求解!
移项:
$$\frac{N_H}{\theta} = \frac{N_T}{1-\theta}$$
交叉相乘:
$$N_H (1-\theta) = N_T \theta$$
$$N_H - N_H \theta = N_T \theta$$
$$N_H = (N_H + N_T) \theta$$
$$\theta^* = \frac{N_H}{N_H + N_T}$$
证明完毕。 数学告诉我们咱直觉完全符合数学推导。
高斯分布的MLE
掌握了伯努利分布,我们来挑战一个更复杂的对手。高斯分布MLE的推导难度升级了,但它曾经在期中考试出现过。
这次我们的数据 $x_1, ..., x_n$ 是连续数值,假设服从高斯分布 $\mathcal{N}(\mu, \sigma^2)$。我们需要同时估计两个参数:均值 $\mu$ 和方差 $\sigma^2$。
首先,写出单点概率密度函数 (PDF)。
$$p(x_i; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( - \frac{(x_i - \mu)^2}{2\sigma^2} \right)$$
然后运用之前的思路,建立对数似然函数 (Log-Likelihood)
似然函数是所有点概率的乘积:$\prod_{i=1}^n p(x_i)$。
因此,我们可以取对数 $\ell(\mu, \sigma^2)$ 将似然函数变成求和:
$$\ell = \sum_{i=1}^n \left[ \log \left( \frac{1}{\sqrt{2\pi\sigma^2}} \right) - \frac{(x_i - \mu)^2}{2\sigma^2} \right]$$
由于$\log(\sigma^{-1}) = -\log \sigma = -\frac{1}{2}\log \sigma^2$,并且与参数无关的常数$2\pi$可以被省略,因此核心部分可以简化为:
$$\ell \approx -\frac{n}{2} \log(\sigma^2) - \frac{1}{2\sigma^2} \sum_{i=1}^n (x_i - \mu)^2$$
最后一步我们来求解均值 $\mu$ (Derive Mean)。
首先将 $\sigma^2$ 视为常数,对 $\mu$ 求导。我们可以得到第一项 $-\frac{n}{2} \log(\sigma^2)$ 的导数为 0。
$$\frac{\partial \ell}{\partial \mu} = - \frac{1}{2\sigma^2} \sum_{i=1}^n 2(x_i - \mu) \cdot (-1)$$
运用链式法则,平方项求导出一个2,内部 $(x_i - \mu)$ 对 $\mu$ 求导出一个 -1。
整理得到:
$$\frac{1}{\sigma^2} \sum_{i=1}^n (x_i - \mu) = 0$$
因为 $\sigma^2 \neq 0$,我们可以直接去掉它:
$$\sum x_i - \sum \mu = 0 \Rightarrow \sum x_i - n\mu = 0$$
$$\hat{\mu} = \frac{1}{n} \sum_{i=1}^n x_i$$
到这里可以给出结论:高斯分布的 MLE 均值就是样本均值。
求解方差 $\sigma^2$ (Derive Variance) 是一大难点。这一步,我们把 $\sigma^2$ 看作一个整体变量(或者设 $v = \sigma^2$)。
回到公式:$\ell = -\frac{n}{2} \log(v) - \frac{1}{2v} S$,其中 $S = \sum (x_i - \mu)^2$。
对 $v$ 求导:
$$\frac{\partial \ell}{\partial v} = -\frac{n}{2v} - S \cdot (-\frac{1}{2v^2})$$
令导数为 0:
$$-\frac{n}{2v} + \frac{S}{2v^2} = 0$$
两边同乘 $2v^2$:
$$-nv + S = 0 \Rightarrow v = \frac{S}{n}$$
代回 $S$ 的定义:
$$\hat{\sigma}^2 = \frac{1}{n} \sum_{i=1}^n (x_i - \hat{\mu})^2$$
结论:高斯的 MLE 方差是样本方差。MLE得到的$\sigma^2$是biased的(因为分母是$n$),unbiased的分母应当是$n - 1$。MLE倾向于低估方差。
指数分布的MLE
指数分布常用于模拟“等待时间”。比如多久之后下一辆公交车会开来。
指数分布的PDF是$f(x) = \lambda e^{-\lambda x}$,而在这里我们要估计的参数是$\lambda$。
大体的思路和之前也是一样的。
Log-Likelihood:
$$L(\lambda) = \prod_{i=1}^N \lambda e^{-\lambda x^{(i)}}$$
取对数:
$$\ell(\lambda) = \sum_{i=1}^N \left( \log \lambda - \lambda x^{(i)} \right)$$
$$\ell(\lambda) = N \log \lambda - \lambda \sum_{i=1}^N x^{(i)}$$求导:
对 $\lambda$ 求导。$\sum x^{(i)}$ 对于 $\lambda$ 来说只是常数系数:
$$\frac{d \ell}{d \lambda} = \frac{N}{\lambda} - \sum_{i=1}^N x^{(i)}$$求解:
令导数为 0:
$$\frac{N}{\lambda} = \sum x^{(i)} \Rightarrow \lambda_{MLE} = \frac{N}{\sum x^{(i)}}$$
$\lambda$ 是“速率参数”。 $\frac{1}{\lambda}$ 是平均等待时间。公式告诉我们:$\frac{1}{\lambda} = \frac{\sum x}{N} = \text{Sample Mean}$。
意思就是样本的平均值就是平均等待时间,倒数一下就是速率。
最大后验估计
到现在为止,MLE 都在问一个问题:"参数是多少,能让数据出现的概率最大?"
但这里有个哲学问题:如果我只扔了两次硬币,都是正面,MLE会告诉你$\theta = 1.0$——这枚硬币100%会出正面。你信吗?
你的直觉会说:"不对,硬币大概率是均匀的,两次正面可能只是运气好。"
这个"直觉"在数学上叫先验知识 (Prior)。最大后验估计(Maximum A Posteriori, MAP) 就是把这个先验知识融入估计的方法。它问的问题变成了:
"结合了我原本的信念(Prior),参数最可能是多少?"
回到贝叶斯定理。由于我们的目标是找到$\theta$的最佳估计,所以在贝叶斯框架下,我们要最大化的就是后验概率 (Posterior) $P(\theta | Data)$
根据贝叶斯公式可得:
$$P(\theta | Data) = \frac{P(Data | \theta) \cdot P(\theta)}{P(Data)}$$
这里的每一项都有具体的含义:
- $P(Data | \theta)$: Likelihood (似然)。即“在这个参数下,数据出现的概率”。
- $P(\theta)$: Prior (先验)。即“在看数据之前,我认为 $\theta$ 是多少的概率”。
- $P(Data)$: Evidence (证据)。这是个常数(对 $\theta$ 来说),用来归一化。
现在我们来对比目标函数:
MAP
MAP的目标就是最大化上面的后验概率 $P(\theta | Data)$。
因为分母 $P(Data)$ 与 $\theta$ 无关,我们可以扔掉它:
$$\theta_{MAP} = \text{argmax}_{\theta} P(Data | \theta) \cdot P(\theta)$$
$P(Data | \theta)$是Likelihood, $P(\theta)$是Prior。
由此可见,MAP 是在 Likelihood 的等高线图上,叠加上了 Prior 的等高线图。最终的峰值位置,是这两股力量博弈的结果。
如果数据很多,Likelihood 很尖锐,那么Prior就拉不动它。相反,如果数据很少,Likelihood 很平坦,Prior就会主导结果。
MLE
而MLE的目标仅仅是最大化 $P(Data | \theta)$。它直接忽略了 $P(\theta)$ 这一项。或者更准确的数学说法是:MLE 等价于假设 Prior $P(\theta)$ 是 Uniform Distribution (均匀分布)。
如果 $P(\theta) = C$ (常数,例如在 [0,1] 上全为 1),那么 MAP 公式变成:
$$\theta_{MAP} = \text{argmax}_{\theta} P(Data | \theta) \cdot C$$
常数 $C$ 不影响求极值的位置,所以:
$$\theta_{\text{MAP}} \rightarrow {\text{argmax}}_{\theta}P(Data | \theta)={\theta}(MLE)$$
因此如果先验分布是均匀分布的,那么MAP的结果将会完全等于MLE。
这也揭示了 MLE 的局限性:它并不是"客观"的,它其实隐含了一个"认为所有参数值可能性都相等"的特定主观先验。而在现实中,这种假设往往是错的(比如硬币大概率是均匀的,身高的均值不可能是 3 米)。
我们上一章提到的 Regularization (平滑),其实在数学上等价于 MAP。通过在 MLE 后面加一个正则项(比如 $\lambda |\theta|^2$),在贝叶斯视角下,就是假设 $\theta$ 服从某种先验分布(比如高斯分布)。
有必要理解并记住这个等式,它会在第5章再次出现:
MAP = MLE + Prior = Loss + Regularization
朴素贝叶斯
现在我们已经有足够的只是来组装一个强大的分类模型了。这个模型就是朴素贝叶斯分类器,aka Naive Bayes Classifier。
在这里,我们的任务是分类。
首先你需要输入。我们的数据会按照点来输入,这些点包含很多特征:$E_1, E_2, ..., E_n$
而需要输出这个数据点的类别。我们叫$H$。
我们的目标是通过计算后验概率$P(H|E_1, ..., E_n)$,来选择概率最大的那个$H$。
根据贝叶斯定理,我们可得:
$$P(H | E_1, ..., E_n) = \frac{P(E_1, ..., E_n | H) \cdot P(H)}{P(E_1, ..., E_n)}$$
但是我们在这里遇见了一个巨大的数学麻烦:Likelihood Term $P(E_1, ..., E_n | H)$。
如果你有 $n$ 个特征,而且每个特征都很复杂,那么它们的联合分布 (Joint Distribution) 极其难算。你需要填满一张巨大的表格,包含所有特征的组合情况。如果有 20 个特征,每个特征只有 2 种取值,表格就有 $2^{20} \approx 1,000,000$ 个格子。我们的数据量往往不够。
所以在朴素贝叶斯中我们来做一个朴素的假设:“在给定类别 $H$ 的情况下,所有的特征 $E_i$ 之间是相互独立的。”。这就是假设条件之间的独立性 (Conditional Independence)。
虽然这在现实中往往不成立(比如“下雨”和“潮湿”通常是关联的),但这个假设能极大地简化计算。
根据独立性公式,那个难算的联合概率变成了简单的连乘:
$$P(E_1, ..., E_n | H) \approx P(E_1 | H) \cdot P(E_2 | H) \cdot ... \cdot P(E_n | H)$$
最后我们可以得到朴素贝叶斯的最终公式:
$$P(H | E_1, ..., E_n) \propto P(H) \cdot \prod_{i=1}^n P(E_i | H)$$
在这里,$P(H)$是我们的Prior,而$P(E_i|H)$就是条件概率。由于分母 $P(E_1...E_n)$ 对于所有类别 $H$ 都是一样的,所以比较大小时可以忽略。
现在,原本需要天文数字般的数据量,现在只需要分别估计每个单独特征的 $P(E_i | H)$ 就行了。这就是所谓“朴素”的威力。
接下来我们来用一个例子演示如何使用朴素贝叶斯来进行估计吧。
给定一个蘑菇,特征是 {Tall, Slim, Black}。判断它是 Poisonous (Yes) 还是 Not Poisonous (No)
| Height | Body | Color | Poisonous |
|---|---|---|---|
| Tall | Fat | Black | No |
| Tall | Fat | White | Yes |
| Short | Slim | White | No |
| Short | Slim | Black | Yes |
| Tall | Slim | White | Yes |
第一步: 训练 (Training / Estimation)
这一步我们需要从表格数据中算出所有的概率拼图。
Prior (先验): $P(Yes) = 3/5$, $P(No) = 2/5$。
Conditional Probabilities (条件概率): 用 MLE来算:
- 在 $H=Yes$ 的这 3 个样本里,Tall 的有几个?$P(Tall | Yes) = 2/3$。
- 在 $H=Yes$ 的这 3 个样本里,Slim 的有几个?$P(Slim | Yes) = 2/3$。
- 在 $H=Yes$ 的这 3 个样本里,Black 的有几个?$P(Black | Yes) = 1/3$。
(同样的步骤算 $H=No$ 的部分...)
第二步: 推断 (Inference / Prediction)
接下来,我们要比较 $P(Yes | Data)$ 和 $P(No | Data)$ 的大小。
YES的得分:
$$P(Yes) \cdot P(Tall|Yes) \cdot P(Slim|Yes) \cdot P(Black|Yes)$$
$$= \frac{3}{5} \cdot \frac{2}{3} \cdot \frac{2}{3} \cdot \frac{1}{3} = \frac{4}{45}$$NO的得分:
$$P(No) \cdot P(Tall|No) \cdot P(Slim|No) \cdot P(Black|No)$$这时回到表格数数,你会发现No的样本有2个。Tall的有1个,Slim的有1个,Black的有1个。
$$= \frac{2}{5} \cdot \frac{1}{2} \cdot \frac{1}{2} \cdot \frac{1}{2} = \frac{1}{20}$$
第三步: 标准化 (Normalization)
现在的两个分数是 $4/45 (\approx 0.088)$ 和 $1/20 (0.05)$。它们加起来不等于 1,因为我们省略了分母。
要得到真正的概率,需要标准化:
$$P(Yes | Data) = \frac{Score_{Yes}}{Score_{Yes} + Score_{No}} = \frac{16}{25} = 0.64$$
结论:这个蘑菇 64% 的概率是有毒的。
如果我们在训练集中从来没有见过“有毒且是黑色”的蘑菇,也就是说$Count(Black|Yes) = 0$,那么根据MLE,$P(Black|Yes)$等于多少呢?
很简单,在一直有毒的情况下,是黑色的概率是0。($P(Black|Yes) = 0$)。但是主要问题在于:
由于$Score_{Yes}$通过这个式子计算:
$$Score_{Yes} = P(Yes) \cdot P(Tall|Yes) \cdot P(Slim|Yes) \cdot \mathbf{P(Black|Yes)}$$
因为这是连乘,只要其中一项是0,整个乘积 $Score_{Yes}$ 就瞬间变成了0。所以,无论这个蘑菇的其他特征(高、瘦)多么像有毒蘑菇,只要它带了一个没见过的特征(黑色),模型就会绝对地判断它“不可能有毒”。这显然太武断了,这就是Zero Frequency Problem。
好在我们有合理的手段来修复这个Bug。如果我们使用 Laplace Smoothing(比如分子+1,分母+K):
$$P(Black|Yes) = \frac{0 + 1}{3 + 2} = \frac{1}{5}$$
这样概率就是一个很小的数(0.2),而不是 0。整个乘积就不会崩溃,只是变得比较小而已。
朴素贝叶斯被称为“朴素 (Naïve)”,是因为它假设特征之间是独立的。
如果在现实中,两个特征是高度相关的(比如“是否下雨”和“空气湿度”同时作为特征)。使用朴素贝叶斯模型,会对预测结果的概率值 (Confidence) 产生什么影响?
可能下意识我们会觉得模型会变得更平均,而不是更极端。事实恰恰相反。模型会变得更加极端。
假如你想去买房,找了三家中介。三个中介来自三个不同的公司,互不认识。如果这三个人都说房子不赖,那么你一定会觉得这房子真不赖。如果你是朴素贝叶斯,你可能会忽视中介之间可能会串通好,或者其他的背后关联因素。
即便特征是高度相关的,朴素贝叶斯也会把它们当作两条独立的铁证,也就是说,经过计算,它把同一份证据计算了两次。在数学上,连乘会导致概率迅速趋近于1或0。因此当特征冗余时,朴素贝叶斯给出的概率值往往是虚高的。
本章小结
除了朴素贝叶斯,这一章我们完成了这三件事:
- 证明了MLE的直觉:用数学推导证明了"频率=概率"的直觉在伯努利分布下是对的
- 扩展到高斯分布:MLE的均值=样本均值,MLE的方差=样本方差(有偏)
- 引入MAP:当数据少时,MLE可能很激进;MAP通过引入先验来"稳住"估计
- MLE:$\theta_{MLE} = \text{argmax}_\theta P(Data|\theta)$
- MAP:$\theta_{MAP} = \text{argmax}_\theta P(Data|\theta) \cdot P(\theta)$
- 当Prior是均匀分布时,MAP = MLE
不带朴素贝叶斯玩是因为它相比后面的内容比较脱节。
现在我们已经有了估计参数的武器(MLE/MAP)。下一章,我们将把这些武器用在一个真实的战场上——线性回归和逻辑回归。
你会看到一个美妙的数学巧合:最小化平方误差,竟然等价于高斯噪声假设下的MLE。而本章学的MAP,在下一章会变身为岭回归(Ridge Regression)。
当样本量 $N \rightarrow \infty$ 时,数据的力量 ($p(x|\theta)$) 会远远压倒先验的力量 ($p(\theta)$),此时 MLE 和 MAP 会趋于一致。只有在数据少的时候,MAP (Prior) 才起决定性作用。