【机器学习数学基础系列】概率论中的极大似然估计:入门与Python实践

科技   2025-01-07 16:28   中国香港  


1. 引言

极大似然估计(Maximum Likelihood Estimation,MLE)是统计学中最重要的参数估计方法之一。本文将从理论基础出发,结合Python代码实现,帮助读者深入理解这一核心概念。

2. 理论基础

2.1 什么是似然函数

似然函数是统计模型中关于参数的函数,它表示在给定观测数据下,模型参数取某个值时的"可能性"。

对于一组独立同分布的观测数据 ,假设它们来自某个概率分布 ,其中 是未知参数。似然函数定义为:

通常为了计算方便,我们会取对数似然:

2.2 极大似然估计的原理

极大似然估计的核心思想是:选择一个参数值 ,使得观测数据出现的可能性最大。数学表达为:

或等价地:

2.3 求解步骤

  1. 写出似然函数
  2. 取对数得到对数似然函数
  3. 求导数
  4. 解方程得到
  5. 验证二阶导数为负,确保是最大值点

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)+2100)
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 优点

  1. 理论基础扎实,具有良好的大样本性质
  2. 计算相对简单,特别是对于指数族分布
  3. 在大样本下,估计量渐近无偏且有效

4.2 缺点

  1. 可能存在多个局部最优解
  2. 对异常值敏感
  3. 在小样本情况下可能表现不佳
  4. 需要知道数据的具体分布形式

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 = [01]  # 初始猜测值
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应用到更复杂的实际问题中,如回归分析、时间序列建模等场景。

参考文献

  1. Casella, G., & Berger, R. L. (2002). Statistical inference (2nd ed.). Duxbury.
  2. Murphy, K. P. (2012). Machine learning: A probabilistic perspective. MIT press.
  3. Bishop, C. M. (2006). Pattern recognition and machine learning. Springer.


机器学习算法与Python实战
长期跟踪关注统计学、数据挖掘、机器学习算法、深度学习、人工智能技术与行业发展动态,分享Python、机器学习等技术文章。回复机器学习有惊喜资料。
 最新文章