社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

概率论中的极大似然估计:入门与Python实践

AI有道 • 1 月前 • 132 次点击  
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.



推荐阅读

(点击标题可跳转阅读)

《机器学习 100 天》视频讲解

公众号历史文章精选

我的深度学习入门路线


重磅

1700多页的《人工智能学习路线、干货分享全集》PDF文档



扫描下方二维码,添加我的微信,领取1700多页的《人工智能学习路线、干货分享全集》PDF文档(一定要备注:资料。 



长按扫码,申请入群



感谢你的分享,点赞,在看三  

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/177947
 
132 次点击