在统计学习和数据科学的世界中,有一种非常强大的参数估计方法,被称为最大似然估计(Maximum Likelihood Estimation,简称MLE)本文带您了解什么是最大似然估计,以及它是如何帮助我们从数据中提取洞见的。
什么是最大似然估计?
最大似然估计是一种基于概率理论的方法,用于估计一个概率模型的参数,使得观测到的数据在该模型下出现的概率最大。换句话说,它寻找的是使我们观察到的数据最有可能发生的参数值。
基本原理
假设我们有一组数据和一个模型,该模型中包含未知的参数。最大似然估计的目标是找到这些参数的最佳估计值,使得这组数据在统计意义上最有可能出现。这涉及到计算所谓的“似然函数”,它是关于模型参数的函数,代表了数据在不同参数取值下的概率。
举个例子,假设我们有一些数据点,并且认为它们来自于正态分布,但目前不知道这个分布的平均值和标准差。最大似然估计会帮助我们找到这两个参数的值,从而使这组数据的出现概率最大化。
数学推导
接下来,通过数学推导理解如何使用最大似然估计(MLE)来推导几种不同分布的参数。
指数分布 (Exponential Distribution)
指数分布常用于描述事件发生的时间间隔,其概率密度函数为,其中是事件发生率。
假设我们有个独立同分布的样本,似然函数为:
对数似然函数为:
求导并令导数为零,找到极值:
解得:
这是的最大似然估计。
几何分布 (Geometric Distribution)
几何分布描述了在成功之前进行的失败次数,概率质量函数为 。
对 个独立的样本,似然函数为:
对数似然函数为:
求导并令导数为零:
解得:
二项分布 (Binomial Distribution)
二项分布描述了在 次独立的是/非试验中成功的次数,其概率质量函数为 。
对于 m 个试验的结果,似然函数为:
对数似然函数为:
求导并令导数为零:
解得:
泊松分布 (Poisson Distribution)
泊松分布用于描述单位时间或单位面积内随机事件的发生次数,其概率质量函数为 。
似然函数为:
对数似然函数为:
求导并令导数为零:
解得:
均匀分布 (Uniform Distribution)
对于在区间 上的均匀分布,似然函数取决于最大值和最小值:
这里, 。为了最大化似然函数,我们需要最小化 ,因此:
正态分布 (Normal Distribution)
正态分布是统计中最常见的分布之一,其概率密度函数为 ,其中 是均值,是方差。
假设有个独立同分布的样本 ,似然函数为:
对数似然函数为:
对 和 分别求导并令导数为零,得到:
对 :
解得 (样本均值)。
对 :
解得 (样本方差)。
威布尔分布 (Weibull Distribution)
威布尔分布通常用于描述生存数据或材料失效时间,其密度函数为,其中是形状参数, 是尺度参数。
似然函数为:
对数似然函数是:
求 和 的导数并解方程得到最大似然估计通常需要数值方法,因为解析解可能难以获得。
伽马分布 (Gamma Distribution)
伽马分布是描述等待多个事件发生所需时间的分布,其密度函数为 ,其中是形状参数, 是率参数。
似然函数为:
对数似然函数是:
求导并求解通常需要数值方法。
帕累托分布 (Pareto Distribution)
帕累托分布常用于描述财富分布等重尾问题,其密度函数为 ,其中 是最小值参数, 是形状参数。
似然函数为:
$$L(\alpha, x_m) = \prod_{i=1}^n \frac{\alpha x_m^{\alpha} {x_i^{\alpha+1}} = \alpha^n x_m^{n\alpha} \prod_{i=1}^n x_i^{-\alpha-1} $$对数似然函数是:
对和分别求导并令导数为零,求解得到:
对: 对 :解得 通常需要数值方法。
贝塔分布 (Beta Distribution)
贝塔分布常用于模型随机变量的概率,它的密度函数为 ,适用于定义在区间上的变量。
对个独立同分布的样本 ,似然函数为:
对数似然函数为:
求导并解方程通常需要数值方法,因为涉及到Gamma函数和其导数。
负二项分布 (Negative Binomial Distribution)
负二项分布用于描述在第 r 次成功之前需要进行的失败次数,其概率质量函数为,其中 是成功的概率。
对数似然函数为:
求导得到的最大似然估计通常需要数值解法。
t分布 (Student's t-Distribution)
t分布广泛用于小样本数据的均值分析中,特别是当总体标准差未知时。t分布的形式较复杂,且似然函数的解析形式不易直接推导,因此通常不通过最大似然估计来直接估计其参数。此处直接给出数值求解代码
import numpy as np
from scipy.optimize import minimize
from scipy.stats import t
def neg_log_likelihood(params, data):
mu, sigma, nu = params
sigma = np.exp(sigma) # 确保 sigma 为正
return -np.sum(t.logpdf(data, df=nu, loc=mu, scale=sigma))
data = np.random.standard_t(df=10, size=100) # 示例数据
initial_guess = [0, np.log(1), 10]
result = minimize(neg_log_likelihood, initial_guess, args=(data,))
print(result.x)
对数正态分布 (Log-Normal Distribution)
如果一个变量的自然对数是正态分布的,则该变量服从对数正态分布。其密度函数为 ,其中 \mu 和 分别是对数的均值和方差。
似然函数为:
对数似然函数为:
对 和 分别求导并令导数为零可以得到最大似然估计
数值解法简析(以Gamma分布为例)
数值方法在处理复杂的最大似然估计(MLE)问题时非常有用,尤其是当分析解难以获得或不存在时。对于伽马分布,由于形状参数和率参数 的似然方程通常不能直接解析求解,数值优化方法成为一种必要的选择。下面是一些常用的数值方法及其在解决伽马分布参数的最大似然估计中的应用:
梯度上升(或梯度下降)
梯度上升法是一种利用似然函数的梯度信息来寻找参数的最大值的技术。基本思想是从一个初始的参数估计开始,然后迭代地调整参数,使得对数似然函数增大。
对于伽马分布,首先需要计算对数似然函数 关于 和 的梯度,然后进行迭代更新:
对 的更新:
对 的更新:
其中, 是学习率,一个小的正数。
牛顿-拉夫森方法(Newton-Raphson Method)
牛顿-拉夫森方法是一种更高效的数值优化技术,它利用了函数的一阶和二阶导数(即梯度和Hessian矩阵)来快速找到极值点。这个方法通常比简单的梯度上升法收敛得更快。
对于伽马分布的参数 和 ,迭代公式如下:
其中, 表示参数向量 , 是对数似然函数的Hessian矩阵, 是梯度向量。
模拟退火(Simulated Annealing)
模拟退火是一种全局优化算法,适用于似然函数可能存在多个局部最大值的情况。该方法通过在迭代过程中引入随机性,有助于算法跳出局部最大值,寻找全局最大值。
使用现有库和工具
在实际应用中,利用现成的统计或数学软件包来执行这些数值优化任务,如Python的scipy.optimize
库,scipy.optimize
提供了多种优化算法,包括牛顿-拉夫森方法和其他高级优化算法。
使用scipy.optimize
中的minimize
函数来找到伽马分布的最大似然估计:
import numpy as np
from scipy.optimize import minimize
from scipy.special import gammaln # 伽玛函数的对数形式
# 对数似然函数
def neg_log_likelihood(params, data):
alpha, beta = params
return alpha * np.log(beta) - gammaln(alpha) + (alpha - 1) * np.mean(np.log(data)) - beta * np.mean(data)
# 数据
data = np.random.gamma(2, 2, size=100)
# 最优化
result = minimize(neg_log_likelihood, x0=[1, 1], args=(data,), method='L
-BFGS-B', bounds=[(0.001, None), (0.001, None)])
print(result)