上一章我们凭借直觉得出了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$。

大体的思路和之前也是一样的。

  1. 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)}$$

  2. 求导:
    对 $\lambda$ 求导。$\sum x^{(i)}$ 对于 $\lambda$ 来说只是常数系数:
    $$\frac{d \ell}{d \lambda} = \frac{N}{\lambda} - \sum_{i=1}^N x^{(i)}$$

  3. 求解:
    令导数为 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)}$$

这里的每一项都有具体的含义:

  1. $P(Data | \theta)$: Likelihood (似然)。即“在这个参数下,数据出现的概率”。
  2. $P(\theta)$: Prior (先验)。即“在看数据之前,我认为 $\theta$ 是多少的概率”。
  3. $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)$ 就行了。这就是所谓“朴素”的威力。


接下来我们来用一个例子演示如何使用朴素贝叶斯来进行估计吧。

例Cpt3.1

给定一个蘑菇,特征是 {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。因此当特征冗余时,朴素贝叶斯给出的概率值往往是虚高的。


本章小结

除了朴素贝叶斯,这一章我们完成了这三件事:

  1. 证明了MLE的直觉:用数学推导证明了"频率=概率"的直觉在伯努利分布下是对的
  2. 扩展到高斯分布:MLE的均值=样本均值,MLE的方差=样本方差(有偏)
  3. 引入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) 才起决定性作用。