机器学习数学优化之最大似然估计详解
机器学习数学优化之最大似然估计详解
最大似然估计(Maximum Likelihood Estimation,MLE)是统计学中用于估计模型参数的重要方法。本文将从基本原理、核心公式、步骤、性质到应用,全面介绍最大似然估计,并通过Python代码实战展示其具体应用。
一、基本原理
假设我们有一个统计模型,其参数为θ,并且我们有一组观测数据X。最大似然估计的目标是找到一个参数值θ_hat,使得在θ=θ_hat的条件下,观测数据X出现的概率(或概率密度)最大。这个概率(或概率密度)通常表示为L(θ; X),称为似然函数。
二、核心公式
似然函数
为了简化计算,我们通常使用对数似然函数。以下是核心公式的推导过程:
定义似然函数:
L(θ; X) = P(X | θ)
取对数似然函数:
l(θ; X) = log L(θ; X)
求导数并设导数为0,得到极值点:
∂l(θ; X) / ∂θ = 0
解方程得到参数估计值:
θ_hat = argmax_θ L(θ; X)
三、步骤
定义似然函数:根据观测数据X和模型参数θ,定义似然函数L(θ; X)。对于离散数据,这通常是概率质量函数的乘积;对于连续数据,这通常是概率密度函数的乘积。
求对数似然函数:由于似然函数往往是多个概率的乘积,直接最大化这个乘积可能比较复杂。因此,通常取对数似然函数l(θ; X) = log L(θ; X),将对数的乘法转化为加法,从而简化计算。
最大化对数似然函数:通过对对数似然函数求导,找到使其最大的参数值θ_hat。这通常涉及到解一个或多个方程,或者使用数值优化方法。
得出参数估计值:将求得的θ_hat作为模型参数的估计值。
四、性质
一致性:在样本量趋于无穷大时,最大似然估计通常是一致的,即估计值会收敛到真实参数值。
渐近正态性:在适当的条件下,最大似然估计具有渐近正态性,即当样本量足够大时,估计值的分布近似为正态分布。
有效性:在所有无偏估计量中,最大似然估计通常具有最小的方差,即它是最有效的。
五、应用
最大似然估计广泛应用于各种统计模型和数据分析中,包括但不限于线性回归、逻辑回归、广义线性模型、混合效应模型等。此外,在机器学习领域,尤其是在参数估计和模型训练中,最大似然估计也是一个重要的工具。
六、代码实战
下面通过一个具体的Python代码示例,展示如何使用最大似然估计进行参数估计:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.optimize import minimize
# 生成模拟数据
np.random.seed(42)
true_mu = 5
true_sigma = 2
data = np.random.normal(true_mu, true_sigma, size=1000)
# 定义负对数似然函数
def neg_log_likelihood(params, data):
mu, sigma = params[0], params[1]
if sigma <= 0:
return np.inf
log_likelihood = np.sum(np.log(norm.pdf(data, mu, sigma)))
return -log_likelihood
# 使用优化器找到 MLE 参数
initial_guess = [0, 1]
result = minimize(neg_log_likelihood, initial_guess, args=(data,), method='L-BFGS-B', bounds=[(None, None), (1e-5, None)])
mle_mu, mle_sigma = result.x
# 绘制数据的直方图与拟合的正态分布曲线对比图
x = np.linspace(min(data), max(data), 1000)
pdf_true = norm.pdf(x, true_mu, true_sigma)
pdf_mle = norm.pdf(x, mle_mu, mle_sigma)
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.hist(data, bins=30, density=True, alpha=0.6, color='g', label='Histogram of data')
plt.plot(x, pdf_true, 'r--', label=f'True Gaussian\n($\mu={true_mu}$, $\sigma={true_sigma}$)')
plt.plot(x, pdf_mle, 'b-', label=f'MLE Gaussian\n($\mu={mle_mu:.2f}$, $\sigma={mle_sigma:.2f}$)')
plt.title('Data Histogram and Fitted Gaussian')
plt.xlabel('Data')
plt.ylabel('Density')
plt.legend()
# 绘制对数似然函数关于均值和标准差的等高线图
mu_values = np.linspace(4, 6, 100)
sigma_values = np.linspace(1.5, 2.5, 100)
log_likelihood_values = np.zeros((len(mu_values), len(sigma_values)))
for i, mu in enumerate(mu_values):
for j, sigma in enumerate(sigma_values):
log_likelihood_values[i, j] = -neg_log_likelihood([mu, sigma], data)
mu_grid, sigma_grid = np.meshgrid(mu_values, sigma_values)
plt.subplot(1, 2, 2)
contour = plt.contour(mu_grid, sigma_grid, log_likelihood_values.T, levels=50, cmap='viridis')
plt.plot(mle_mu, mle_sigma, 'ro', label='MLE Estimate')
plt.colorbar(contour, label='Negative Log-Likelihood')
plt.title('Log-Likelihood Contours')
plt.xlabel('Mean (mu)')
plt.ylabel('Standard Deviation (sigma)')
plt.legend()
plt.tight_layout()
plt.show()
效果如下:
总结
最大似然估计在许多情况下都非常有效,但它也有一些局限性。例如,当模型假设不正确或数据存在异常值时,最大似然估计可能会受到较大影响。此外,对于某些复杂的模型或数据分布,最大似然估计的计算可能非常困难或耗时。在这些情况下,可能需要考虑其他估计方法,如贝叶斯估计等。
