Skip to content

统计学

最大似然估计

最大似然估计(Maximum Likelihood Estimation, MLE) 是用来估计一个概率模型参数的一个方法。简单来说,MLE根据手中已有的数据(结果),来逆推最有可能产生这些数据的模型参数(原因),因此这是一种由果索因的方法。

无论是最简单的算平均值,还是训练ChatGPT,核心逻辑都是这么几步:

  1. 设计模型,即假设数据符合某种分布,如:\(P(x|\theta)\)\(\theta\) 是未知参数。
  2. 写似然(Likelihood):把所有数据的概率乘起来,求这组数据集体出现的概率
  3. 取对数(Log-Likelihood):为了好计算,把乘法变成加法
  4. 求最大值(Maximize):对于简单模型,可以直接求解析解;对于复杂模型,可以用梯度下降法逼近

正态分布案例

我们举一个正态分布的案例:你是某品牌橙汁工厂的厂长,你的瓶子上印着净含量:500ml。法律规定:不能超过1%的瓶子少于500ml,否则会被市场监管局重罚。(即不合格率不能超过1%)

现在,我们的机器是不完美的,有时候灌502ml,有时候498ml。机器上有两个旋钮:

  1. 目标设定值(\(\mu\)): 你设定机器瞄准多少毫升灌。
  2. 精度/稳定性(\(\sigma\)): 机器越贵、维护越好,波动越小(\(\sigma\) 越小)。

现在,我们刚修完机器,随机抽检了10瓶果汁,测量了他们的实际体积,测量结果如下(单位 ml):

\[ 502, 501, 499, 503, 498, 502, 500, 504, 497, 504 \]

现在你需要回答两个问题:

  1. 现在的机器状态是什么? (求 \(\mu\)\(\sigma\))——因为维修后我们不知道机器状态。
  2. 我会不会被罚款? (计算 \(P(X < 500)\) 的概率)

第一步,模型假设与参数估计。

一眼看过去,好像都在 500 附近,平均值应该比 500 大一点点。但到底安不安全?靠眼睛看不出来。我们假设灌装误差是由无数个微小因素(电压波动、气压、机械磨损)叠加的。我们假设他们是服从正态分布(Normal Distribution) 的。模型公式记作:\(X \sim N(\mu, \sigma^2)\),这里有两个我们不知道的“参数”:

  • \(\mu\)(均值): 代表机器的真实准星。
  • \(\sigma\)(标准差): 代表机器的真实抖动幅度。

第二步,写似然函数。

既然这 10 个数据(502, 501...)已经实实在在地发生了,那么机器的参数(\(\mu\)\(\sigma\)),一定就是让这组数据出现概率最大的那一组参数。换句话说,我们已经看到了一组结果,那么我们要反推的就是最可能导致这个结果的那一组参数(在这里就是\(\mu\)\(\sigma\))。

在“由果索因”的逻辑下,似然函数(Likelihood Function) 的本质就是:把这 10 个数据同时发生的概率用公式写出来。既然我们假设每一瓶果汁的灌装是互相独立的,那么 10 瓶果汁同时出现这些特定数值的总概率,就是 每一瓶概率的乘积

对于任何一瓶果汁 \(x_i\),它出现的概率(概率密度)由正态分布公式决定:

\[ f(x_i | \mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x_i - \mu)^2}{2\sigma^2}} \]

们将这 10 个概率乘在一起。似然函数通常记作 \(L(\mu, \sigma)\)

\[ L(\mu, \sigma) = f(x_1 | \mu, \sigma) \times f(x_2 | \mu, \sigma) \times \dots \times f(x_{10} | \mu, \sigma) \]

用数学符号 \(\prod\)(连乘符号)表示就是:

\[ L(\mu, \sigma) = \prod_{i=1}^{10} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x_i - \mu)^2}{2\sigma^2}} \]

为了方便你看清它的结构,我们利用指数的性质(底数相同,指数相加),把它展开:

\[ L(\mu, \sigma) = \underbrace{\left( \frac{1}{\sqrt{2\pi}\sigma} \right) \times \dots \times \left( \frac{1}{\sqrt{2\pi}\sigma} \right)}_{10次} \times e^{\left[ -\frac{(x_1-\mu)^2}{2\sigma^2} - \frac{(x_2-\mu)^2}{2\sigma^2} - \dots - \frac{(x_{10}-\mu)^2}{2\sigma^2} \right]} \]

整理合并后,这就是最终的 似然函数

\[ L(\mu, \sigma) = \left( \frac{1}{2\pi\sigma^2} \right)^{5} \exp\left( -\sum_{i=1}^{10} \frac{(x_i - \mu)^2}{2\sigma^2} \right) \]

(注:前面是 10 次方,但因为根号和平方的关系简化为了 5 次方;\(\exp\) 就是 \(e\) 的次方)

这个公式现在是一个关于 \(\mu\)\(\sigma\) 的函数:

  • \(x_i\) 是已知的: 就是你量出的那 10 个数(502, 501...)。
  • \(\mu\)\(\sigma\) 是变量: 它们就像收音机上的两个旋钮。

最大似然估计的任务就是: 我们要不断地旋转 \(\mu\)\(\sigma\) 这两个旋钮,直到上面这个 \(L\) 的值达到 最大 。当 \(L\) 最大时,那一组 \(\mu\)\(\sigma\) 就是我们要找的“最可能导致这个结果”的参数。

第三步,取对数

在数学上,我们要把这 10 个数据的概率乘起来。正态分布的概率密度函数 \(f(x)\) 含有 \(e\) 的指数。

\[ L(\mu, \sigma) = \prod_{i=1}^{10} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x_i - \mu)^2}{2\sigma^2}} \]

如果你直接对这个连乘求导,你会算到怀疑人生。于是我们取 对数(\(\ln\) ,利用 \(\ln(A \cdot B) = \ln A + \ln B\) 的性质,把“连乘”变“连加”:

\[ \ell(\mu, \sigma) = \ln(L) = \sum_{i=1}^{10} \left[ \ln\left(\frac{1}{\sqrt{2\pi}\sigma}\right) - \frac{(x_i - \mu)^2}{2\sigma^2} \right] \]

整理一下:

\[ \ell(\mu, \sigma) = - \frac{n}{2} \ln(2\pi\sigma^2) - \frac{1}{2\sigma^2} \sum_{i=1}^{10} (x_i - \mu)^2 \]

第四步,求最大值

为了找到让概率最大的 \(\mu\),我们需要对 \(\mu\) 求导 ,并令导数为 0。

你会发现,式子中只有最后一项跟 \(\mu\) 有关。\(\mu\) 求偏导:

\[ \frac{\partial \ell}{\partial \mu} = \frac{1}{\sigma^2} \sum_{i=1}^{10} (x_i - \mu) = 0 \]

解方程:

\[ \sum x_i - 10\mu = 0 \implies \mu = \frac{\sum x_i}{10} \]

这个结果说明:最佳的 \(\mu\) 就是样本平均值。

同理,对 \(\sigma^2\) 求偏导,可以解得:

\[ \sigma^2 = \frac{1}{10} \sum (x_i - \mu)^2 \]

这就是样本标准差。

我们把刚才的十个样本带入,求得\(\mu\)(均值):

\[ (502+501+499+503+498+502+500+504+497+504) / 10 = \mathbf{501.0} \]

\(\sigma\)(标准差)算出来大约是2.32。

现在我们可以得到结论:机器准星瞄在 501ml ,但由于维修后的稳定性问题,波动(标准差)达到了 2.32ml

那对于第二个问题,我们是否会被罚款呢?

计算 Z 分数 (看看 500 偏离了中心几个标准差):

\[ Z = \frac{500 - 501}{2.32} \approx -0.43 \]

查标准正态分布表:\(P(Z < -0.43) \approx \mathbf{33.36\%}\)

这表明我们的机器现在会产出33.36%的不合格产品,这是严重不合格的。

由于你现在的 \(\sigma = 2.32\) 太大,你面临两个选择:

  1. 维修机器:\(\sigma\) 降到 0.43 以下(保持 \(\mu=501\) 不变)。
  2. 暴力加量: 保持 \(\sigma=2.32\) 不变,但把准星 \(\mu\) 调高到 505.4ml 以上。

理由:在正态分布中,如果我们希望左侧阴影面积(不合格率)只有 1% ,查标准正态分布表可以得到一个关键的常数: \(Z = -2.326\) 。这意味着: 500ml 必须位于均值 \(\mu\) 左侧至少 2.326 倍标准差(\(\sigma\))的地方 。公式表达为:

\[ -2.326 = \frac{500 - \mu}{\sigma} \]

如果决定不改变准星(保持 \(\mu = 501\) ),而是通过维修机器来提高稳定性(减小 \(\sigma\) )。

我们将已知数代入公式:

\[ -2.326 = \frac{500 - 501}{\sigma} \]
\[ -2.326 = \frac{-1}{\sigma} \]
\[ \sigma = \frac{1}{2.326} \approx \mathbf{0.43} \]

结论: 如果你不想多送果汁给顾客(维持在 501ml),你就必须把机器的抖动(\(\sigma\))从原来的 2.32 降低到 0.43 。这说明你需要极大幅度地提升机器精度。

暴力加量的方案则是承认机器修不好(保持 \(\sigma = 2.32\) ),但为了不违法,你只能把准星调高(增加 \(\mu\) ),用“多送果汁”来换取合规。

我们将已知数代入公式:

\[ -2.326 = \frac{500 - \mu}{2.32} \]

解方程:

\[ -2.326 \times 2.32 = 500 - \mu \]
\[ -5.396 = 500 - \mu \]
\[ \mu = 500 + 5.396 \approx \mathbf{505.4} \]

结论: 如果机器还是这么抖,为了保证 99% 的瓶子都超过 500ml,你的准星必须瞄准在 505.4ml 。这意味着你平均每瓶要多送 5.4ml 给顾客。


评论 #