跳至主要内容

最大似然估计(MLE)入门

了解什么是最大似然估计(MLE)、其数学基础、实际示例,以及如何用 Python 实现 MLE。
· 13分钟 阅读

使用 AI 探索

估计参数是统计分析和机器学习中的基础步骤。在众多可用方法中,最大似然估计(MLE)因其直观性、数学严谨性,以及对不同类型数据与模型的广泛适用性而被广泛采用。

在本文中,您将了解 MLE 是什么,通过详细推导与示例探索其数学基础,并掌握有效实现 MLE 的实用计算方法。

什么是最大似然估计(MLE)?

最大似然估计(MLE)是一种重要的统计方法,用于估计概率分布的参数,方法是最大化似然函数。

流程图展示观测数据、统计模型以及包含 MLE 在内的参数估计方法

就 MLE 在统计推断中的定位而言,它是我们用来估计参数的最常见方法之一。

不过,您此时可能还有另一个问题:什么是似然函数?我们再展开讨论。

什么是似然函数?

我们可以将似然函数理解为:衡量某一组参数对您观测到的数据解释得有多好的一种方式。

换句话说,它回答的是:“给定这些参数取值,我看到这组数据的可能性有多大?” 但这里常见一个关于概率与似然的误解:

  • 概率是从参数出发预测数据。
  • 似然衡量在给定观测数据的情况下,不同参数取值的合理性。对固定数据而言,它是参数的函数;相对地,概率是在固定参数下关于数据的函数。

因此,概括来说,似然函数以模型参数为输入,输出一个数值,用来表示在给定数据下这些参数有多“合理”。

似然函数的值越大,说明这些参数对您的数据解释得越好。

更直白地说,似然函数帮助我们为不同的参数选择“打分”,从而选出使观测数据“最可能”的那一组参数。

既然我们已理解了概率与似然的区别以及 MLE 的用途,下面进入其背后的数学。示意图显示:概率由参数预测数据,而似然由数据推断参数。

如何推导 MLE 公式

在进入具体示例之前,先来看看一般情况下如何推导最大似然估计量(MLE)。我们将逐步讲解每一步及其背后的理由。

步骤 1:定义概率模型

假设我们有一个数据集:x₁, x₂, ..., xₙ。我们认为这些数据点来自一个依赖未知参数 θ(theta)的概率分布。我们的主要目标是估计 θ。 

例如,如果数据集与掷硬币有关,θ 可以是正面朝上的概率;如果数据是连续型的,如班级学生的身高,θ 可以是正态分布的均值。

步骤 2:写出似然函数

似然函数度量当 θ 取不同数值时,观测到您的数据的可能性有多大。其定义为:

直观上,我们在问:给定参数 θ 取某个具体值,观测到这组特定数据的概率是多少? 

这组数据表示为在 θ 参数化的模型下,观测到各个数据点(x₁, x₂, ..., xₙ)的联合概率。

利用概率的链式法则,我们可以将上式展开为:

不过,这个式子相当复杂!因此我们作出假设:数据点是相互独立——更具体地,在给定 θ 条件下独立。

据此,我们可以将联合概率表示为各个概率的乘积:

由于我们的观测数据点在给定 θ 条件下彼此独立,我们有如下等式:

这是因为我们假设一旦知道 θ 的取值,数据点 x₁ 与 x₂ 在条件上相互独立。

步骤 3:找到使似然最大的 θ 值

现在我们需要找到使似然函数达到最大的 θ(即让观测数据最可能发生):

不过请注意,我们的似然函数包含乘积。处理乘积会很繁琐,尤其当数据点很多时。为简化处理,我们对似然函数取对数,将乘积转为求和。

这就得到对数似然,它具有一些有益性质:

  • 对数将乘积转为求和,尤其在求导时更易处理。
  • 对数函数是单调的,因此最大化对数似然与最大化似然得到的 θ 相同。

log(x) 函数的图像

步骤 4:求解最优值

现在我们可以进行求导,不过在机器学习中,我们通常希望损失函数可被最小化。幸运的是,这很容易实现。

在函数前加上负号(即乘以 -1),我们就需要最小化我们的损失函数,它现在被称为负对数似然损失函数。

-log(x) 函数的图像

现在我们可以用微积分来求 θ 的取值:对对数似然关于 θ 求导、令其为 0,并解出 θ。这是因为函数在导数为 0(且二阶导数为正)处取得极小值。

因此,MLE 的最终方程为:

MLE 示例

既然我们已成功推导出 MLE 方程,接下来通过一些示例来加深理解。

掷骰子示例

从一个简单的离散示例开始:估计一枚可能带偏的骰子掷出 6 的概率。

假设我们掷骰子 12 次并记录结果。我们希望用多项式(类别)分布建模,但先聚焦于估计掷出 6 的概率 θ(theta)。在本例中:

  • 参数(θ):您要估计的取值——掷出 6 的概率
  • 数据(x):我们观测到的结果——12 次中出现 4 次 6

现在计算似然函数。由于我们在 12 次中掷出 4 次 6,得到:

之所以如此,是因为 12 次中有 4 次为 6——于是出现 θ⁴;另外 8 次不是 6——于是出现 (1 - θ)⁸ 项。

请注意,我们将这些概率相乘,是因为我们假设它们在条件上相互独立。

接下来按前文所述,取负对数似然,得到如下方程:

最后,对该式关于 θ 求导并令其为 0(因为我们要找到极小点):

由此可得结论:θ 等于 ⅓。 

注意:如果得到多个 θ 解,还需要计算二阶导数,判断哪些 θ 会给出正值(以确认找到的是极小点)。下图中的示例函数也说明了这一点:

示例显示极小点的二阶导数为正。

身高示例

接着看一个连续型示例——估计正态(高斯)分布的均值。

假设我们有 5 个人的身高数据:160、165、170、175、180(单位:厘米)。我们还假定这些数据来自一个均值 μ 未知、方差 σ² 已知(为简化,设 σ² = 25)的正态分布。

  • 参数(μ):您要估计的值(平均身高)
  • 数据(x₁, x₂, ..., x₅):观测到的身高

已知方差下的正态分布似然函数为:

虽然看上去很复杂,但取负对数会大幅简化。您也能看到在方程中使用对数的威力。得到的方程如下:

这里得到两个项,但注意第二项在求导时可以忽略,因为我们是对 μ 求导,而第二项不含 μ。

我们已接近答案,但请注意括号中的 μ。

由于它是一个常数,相加 n 次后就是 n*μ,因此可以直接乘以 n。

最终答案应当符合直觉:它在数学上即为将所有 x 求和后除以 n(观测数),这也正是均值的定义!

将我们的数据代入该式,可得均值为 170 厘米。

为了更直观,下面的动图展示了当我们改变 μ 时似然如何变化:

动图展示改变高斯分布均值如何影响对数似然。对数似然在观测数据概率最高时达到最大。

在这两个示例中,MLE 都为我们找到了在所选模型下使观测数据最可能发生的参数取值。显然,MLE 也可以用于多参数情形,只是计算会稍长一些!

编写 MLE 代码

理解了 MLE 的基本结构后,让我们看看如何用 Python 编码实现。我们将实现上一个(身高)示例的解法。

# Importing libraries 
import numpy as np # used for handling arrays and mathematical operations.
from scipy.optimize import minimize # function that minimizes another function

# This is our sample data 
data = np.array([160, 165, 170, 175, 180])

# This was the variance we had assumed before
sigma_squared = 25

# Negative Log-Likelihood function
def negative_log_likelihood(mu):
    n = len(data) # Number of data points
    return 0.5 * n * np.log(2 * np.pi * sigma_squared) + \
           np.sum((data - mu)**2) / (2 * sigma_squared) # The NLL is for the Univariate Gaussian Distribution

# Optimizing the NLL
result = minimize(negative_log_likelihood, x0=170)  # initial guess

# Our final estimated mean
estimated_mu = result.x[0]
print(f"MLE estimate of mu: {estimated_mu}")

计算策略与算法

注意在编写上述示例代码时,我们创建了一个 negative_log_likelihood() 函数,其中包含了计算单变量高斯分布的 MLE的主要逻辑。

一方面,可以说我们最终是把该方程“硬编码”出来,并借助 scipy.optimize 去最小化这个函数。当然,这完全可行,因为高斯分布有闭式解。

我们再来看计算 MLE 解的其他方法。

闭式解及其适用场景

如上所述,在一些幸运的情形下,我们可以解析地求解 MLE 方程,也就是说,我们可以推导出参数估计的精确公式。这类解称为闭式解,通常简单、直观,且便于编码与计算。

一个重要的问题是:何时存在闭式解?

  1. 当对数似然函数可微、凹(或具良好形状)且代数上可处理时。
  2. 当模型足够简单,通常只涉及一到两个参数,且没有潜在(隐藏)变量。

分布

估计参数

闭式 MLE 解

伯努利

p

\hat{p} = #number of success/n

二项分布

p

\hat{p} = x/n

泊松

λ

λ = 1/n*Σx_i

高斯/正态

μ

μ = 1/n*Σx_i

数值优化技术

对于更复杂的模型,解析解不存在或过于复杂。在这种情况下,我们使用数值优化方法——通过迭代算法搜索使对数似然最大的参数。简要说明如下:

  1. 牛顿-拉夫森法:该方法利用:
  • 一阶导数(梯度)来确定斜率,以及
  • 二阶导数(Hessian)来衡量曲率并相应调整步长。
  • 其更新规则如下:
  • 主要优点是在最优点附近收敛快。
  • 但它需要计算二阶导数,在高维时可能不稳定或开销大。
  1. 拟牛顿法(如 BFGS):
  • 仅用一阶导数来近似 Hessian 矩阵。
  • 被 Python 中的常用库如scipy.optimize.minimize 采用(默认即 BFGS)。
  • 相较牛顿-拉夫森法,通常更数值稳定且适用面更广。
  1. 期望最大化(EM)算法:
  • 当数据涉及潜在(隐藏)变量——即未被直接观测但会影响数据的取值时,使用的专门优化技术。
  • 该算法包含两个步骤:
    • E 步(期望):利用当前参数估计与观测数据,计算对数似然的期望。
    • M 步(最大化):最大化该期望的对数似然以更新参数估计。

MLE 的性质

从上述示例与推导可见,MLE 十分有用。更正式地,MLE 具有以下性质:

  1. 相合性(Consistency):当样本量增加时,MLE 收敛于参数的真实值。
  2. 渐近正态性(Asymptotic Normality):对大样本,MLE 的分布在真实参数值附近近似正态(钟形)。这是构造置信区间的基础。
  3. 有效性(Efficiency):在所有无偏估计量中,MLE 达到可能的最小方差(至少在渐近意义下达到 Cramér-Rao 下界)。
  4. 不变性(Invariance):若 θ̂ 是 θ 的 MLE,则对任意函数 g,g(θ̂) 是 g(θ) 的 MLE。换言之,MLE 在变换下保持不变。

不过,在以下情形下,MLE 可能不是最佳选择:

  1. 小样本:样本量较小时,MLE 可能有偏。例如,方差的 MLE(σ̂²)往往低估真实方差(σ²)。
  2. 稳健性:MLE 对异常值与模型设定错误较为敏感。M-估计等替代方法可提供更稳健的估计。
  3. 贝叶斯替代:最大后验(MAP)估计将先验信息与似然结合,提供贝叶斯视角,尤其在数据有限时往往更稳定。

跨统计建模的应用

本节我们看看 MLE 在机器学习与人工智能中的实际应用。

回归与分类

MLE 最重要的应用之一出现在逻辑回归中。在这里,我们估计某一结果属于某一类别(例如客户流失)的概率,方法是拟合参数以最大化观测结果的似然。

即便在线性回归中,如果我们假设误差服从正态分布,那么最小二乘解其实也是 MLE。

假设检验与模型选择

MLE 也可用于比较模型。

例如,似然比检验(LRT)可帮助我们检验向模型添加额外变量是否显著提升性能。其原理是比较两个模型的似然:一个更简单(原假设),一个更复杂(备择假设)。

我们还有赤池信息准则(AIC),通过惩罚复杂度来避免过拟合。这些工具在金融、医学、市场营销等领域广泛使用。

如果您希望进一步探索除似然之外度量概率分布差异的方法,请查看我的教程:KL 散度详解。

MLE 的局限与替代方案

尽管 MLE 功能强大,但也存在不足。我们快速回顾它的短板,以及可选替代方法。

MLE 的主要局限

  • 对模型设定敏感:如果模型错误(例如对偏斜数据使用正态分布),MLE 会给出误导性结果。
  • 对异常值敏感:少量异常点就可能严重扰动估计。
  • 计算成本高:对于参数众多或带约束的大模型,似然优化可能缓慢或不稳定。
  • 多重解:有时似然面存在多个峰(局部极大),使得寻找最优解变得棘手。

最大似然估计的替代方法

当 MLE 表现不佳时,可以考虑:

  • MAP(最大后验):与 MLE 类似,但加入先验。这在数据有限时有助于稳定估计。
  • 矩估计法:将样本矩(如均值或方差)与理论矩匹配。精度不如 MLE,但计算非常容易。
  • 最小二乘:在如带高斯误差的线性回归等场景,最小二乘与 MLE 等价;当 MLE 过于复杂时,最小二乘仍可发挥作用。

不同方法适用于不同情境。MLE 未必总是答案,但往往是很好的起点。

结语

最大似然估计是进行参数估计最自然、最广泛使用的方法之一。其核心思想是让观测数据尽可能“可能”,因此可用于多种情境,如掷硬币、身高的高斯分布等。

MLE 能在不同模型间迁移并随数据规模扩展,兼具数学优雅与实践威力。尽管在小样本或数据杂乱时存在短板,但在学习机器学习与人工智能时,它仍是奠基性的工具。

如果您正走在机器学习之路上,欢迎查看我们的Python 机器学习科学家职业路径,涵盖监督、无监督与深度学习。

准备通过实践练习加深对最大似然估计的理解吗?以下资源可帮助您应用所学、获得上手体验:

最大似然估计常见问答

似然与概率有何不同?

概率从参数出发,问“我应当期望看到什么数据?” 似然从数据出发,问“哪个参数让这组数据最可信?”

为何要对似然取对数?

取对数把冗长的乘积变成简单的求和,使数学推导更简洁,同时不改变极大值所在的位置。

MLE 总能找到真实参数吗?

数据充足且干净、独立时,它会收敛到真实值;但在样本很小或很杂乱时,可能会偏离或略有偏差。

如果我的数据点并不独立怎么办?

标准的 MLE 假设独立性,因此对于时间序列或空间数据,我们需要能刻画这些相关性的其他模型。

MLE 与最小二乘有什么联系?

当假设回归误差服从正态分布时,最小化平方误差(最小二乘)与最大化似然(MLE)是等价的。

Vaibhav Mehra

作者

Vaibhav Mehra

主题