1. 引言
极大似然估计(Maximum Likelihood Estimation,MLE)是统计学中最重要的参数估计方法之一。本文将从理论基础出发,结合Python代码实现,帮助读者深入理解这一核心概念。
2. 理论基础
2.1 什么是似然函数
似然函数是统计模型中关于参数的函数,它表示在给定观测数据下,模型参数取某个值时的"可能性"。
对于一组独立同分布的观测数据 ,假设它们来自某个概率分布 ,其中 是未知参数。似然函数定义为:
通常为了计算方便,我们会取对数似然:
2.2 极大似然估计的原理
极大似然估计的核心思想是:选择一个参数值 ,使得观测数据出现的可能性最大。数学表达为:
或等价地:
2.3 求解步骤
写出似然函数 取对数得到对数似然函数 求导数 解方程得到 验证二阶导数为负,确保是最大值点
3. 实践案例
3.1 正态分布参数估计
假设数据来自正态分布 ,我们用Python来实现参数估计:
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
# 生成模拟数据
np.random.seed(42)
true_mu = 2.5
true_sigma = 1.5
sample_size = 1000
data = np.random.normal(true_mu, true_sigma, sample_size)
# MLE估计
mu_mle = np.mean(data)
sigma_mle = np.std(data, ddof=0) # ddof=0 for MLE
print(f"真实参数: μ = {true_mu}, σ = {true_sigma}")
print(f"MLE估计: μ = {mu_mle:.4f}, σ = {sigma_mle:.4f}")
# 可视化
x = np.linspace(min(data)-2, max(data)+2, 100)
plt.hist(data, bins=30, density=True, alpha=0.7, label='观测数据')
plt.plot(x, norm.pdf(x, mu_mle, sigma_mle),
'r-', label='MLE拟合')
plt.plot(x, norm.pdf(x, true_mu, true_sigma),
'g--', label='真实分布')
plt.legend()
plt.title('正态分布MLE估计结果')
plt.xlabel('x')
plt.ylabel('密度')
plt.show()
3.2 泊松分布参数估计
对于泊松分布 ,其概率质量函数为:
似然函数为:
对数似然:
Python实现:
import numpy as np
from scipy.stats import poisson
import matplotlib.pyplot as plt
# 生成模拟数据
np.random.seed(42)
true_lambda = 3.5
sample_size = 1000
data = np.random.poisson(true_lambda, sample_size)
# MLE估计
lambda_mle = np.mean(data) # 泊松分布的MLE就是样本均值
print(f"真实参数: λ = {true_lambda}")
print(f"MLE估计: λ = {lambda_mle:.4f}")
# 可视化
x = np.arange(0, max(data)+5)
plt.hist(data, bins=range(max(data)+2), density=True,
alpha=0.7, label='观测数据')
plt.plot(x, poisson.pmf(x, lambda_mle), 'ro-',
label='MLE拟合')
plt.plot(x, poisson.pmf(x, true_lambda), 'go--',
label='真实分布')
plt.legend()
plt.title('泊松分布MLE估计结果')
plt.xlabel('k')
plt.ylabel('概率')
plt.show()
4. 优缺点分析
4.1 优点
理论基础扎实,具有良好的大样本性质 计算相对简单,特别是对于指数族分布 在大样本下,估计量渐近无偏且有效
4.2 缺点
可能存在多个局部最优解 对异常值敏感 在小样本情况下可能表现不佳 需要知道数据的具体分布形式
5. 进阶话题
5.1 数值优化方法
在实际应用中,很多情况下无法得到似然函数的解析解,需要使用数值优化方法:
from scipy.optimize import minimize
def negative_log_likelihood(params, data):
"""自定义负对数似然函数"""
mu, sigma = params
return -np.sum(norm.logpdf(data, mu, sigma))
# 使用scipy.optimize求解
initial_guess = [0, 1] # 初始猜测值
result = minimize(negative_log_likelihood,
initial_guess,
args=(data,),
method='Nelder-Mead')
print("数值优化结果:")
print(f"μ = {result.x[0]:.4f}")
print(f"σ = {result.x[1]:.4f}")
5.2 置信区间估计
MLE估计量的渐近正态性质允许我们构造参数的置信区间:
from scipy import stats
# 计算标准误
se_mu = sigma_mle / np.sqrt(sample_size)
se_sigma = sigma_mle / np.sqrt(2 * (sample_size - 1))
# 95%置信区间
ci_mu = stats.norm.interval(0.95, mu_mle, se_mu)
ci_sigma = stats.norm.interval(0.95, sigma_mle, se_sigma)
print("\n95%置信区间:")
print(f"μ: [{ci_mu[0]:.4f}, {ci_mu[1]:.4f}]")
print(f"σ: [{ci_sigma[0]:.4f}, {ci_sigma[1]:.4f}]")
6. 总结
极大似然估计是统计学中最基础也最重要的方法之一。通过本文的理论讲解和Python实践,我们不仅理解了MLE的数学原理,还掌握了如何在实际问题中应用这一方法。建议读者在理解基础概念后,尝试将MLE应用到更复杂的实际问题中,如回归分析、时间序列建模等场景。
参考文献
Casella, G., & Berger, R. L. (2002). Statistical inference (2nd ed.). Duxbury. Murphy, K. P. (2012). Machine learning: A probabilistic perspective. MIT press. Bishop, C. M. (2006). Pattern recognition and machine learning. Springer.