ML 系列:第 40 节 — 最大似然MLE 的简单问题
一、说明
最大似然估计 (MLE) 是统计学和机器学习中用于估计概率模型参数的基本技术。在本文中,我们将介绍一个使用 MLE 估计正态分布参数的简单示例。我们将使用 Python 进行实现和可视化。
二、问题陈述
假设我们有一组数据点,我们认为这些数据点来自具有未知均值μ和方差sigma²的正态分布。我们的目标是使用 MLE 估计参数μ和sigma²。
生成示例数据
首先,让我们从已知均值和方差的正态分布中生成一些样本数据。
import numpy as np
import matplotlib.pyplot as plt
# 设置种子以实现可重复性
np.random.seed( 42 )
# True 参数
mu_true = 5
sigma_true = 2
# 生成样本数据
data = np.random.normal(mu_true, sigma_true, 1000 )
# 绘制数据直方图
plt.hist(data, bins= 30 , density= True , alpha= 0.6 , color= 'g' )
plt.title( '样本数据直方图' )
plt.xlabel( '值' )
plt.ylabel( '频率' )
plt.show()
输出:
实现正态分布的 MLE
为了找到正态分布参数的 MLE 估计值,我们需要:
定义似然函数。
取似然函数的对数(对数似然)。
通过最大化对数似然来推导出 MLE 估计的表达式。
对于数据集 {x1, x2,…, xn},假设它服从均值为 μ 、方差为 sigma² 的正态分布,我们的目标是找到最大化观察该数据可能性的参数值。
概率密度函数
正态分布的概率密度函数 (PDF) 为:
该函数给出给定参数 μ 和 sigma² 的单个观测 x 的可能性。
- 似然函数
对于 n 个独立观测值的数据集 {x1, x2, …, xn},联合似然函数 L(μ, σ2 ∣ x1, x2, …, xn) 是各个概率的乘积:
代入正态分布的 PDF,我们得到:
- 对数似然函数
为了简化计算并避免数值下溢(因为许多小概率的乘积可能非常小),我们取似然函数的自然对数。对数似然函数为:
利用对数的性质,结果变成:
进一步简化:
这是正态分布的对数似然函数。
对于正态分布,对数似然由以下公式给出:
μ 和 sigma² 的 MLE 估计值为:
对于 Sigma 2:
三、让我们用 Python 实现它。
# 计算 MLE 估计值
mu_mle = np.mean(data)
sigma_mle = np.std(data, ddof= 0 ) # ddof=0 用于标准差的 MLE 估计
print ( f'平均值的 MLE 估计 (mu): {mu_mle} ' )
print ( f'标准差的 MLE 估计 (sigma): {sigma_mle} ' )
可视化结果
我们现在可以通过绘制数据直方图并叠加估计的正态分布来可视化结果。
from scipy.stats import norm
# Plot histogram of the data
plt.hist(data, bins=30, density=True, alpha=0.6, color='g', label='Data')
# Plot the true normal distribution
x = np.linspace(min(data), max(data), 1000)
plt.plot(x, norm.pdf(x, mu_true, sigma_true), 'r--', label='True Distribution')
# Plot the estimated normal distribution
plt.plot(x, norm.pdf(x, mu_mle, sigma_mle), 'b-', label='Estimated Distribution')
plt.title('Histogram and Normal Distributions')
plt.xlabel('Value')
plt.ylabel('Density')
plt.legend()
plt.show()
输出:
四、结论
在这篇文章中,我们演示了如何使用最大似然估计 (MLE) 来估计正态分布的参数。我们生成了样本数据,计算了平均值和标准差的 MLE 估计值,并可视化了结果。这个简单的例子说明了 MLE 在统计建模和推断中的强大功能和实用性。