问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习数学优化之最大似然估计详解

创作时间:
作者:
@小白创作中心

机器学习数学优化之最大似然估计详解

引用
CSDN
1.
https://blog.csdn.net/qq_65664454/article/details/145656329

最大似然估计(Maximum Likelihood Estimation,MLE)是统计学中用于估计模型参数的重要方法。本文将从基本原理、核心公式、步骤、性质到应用,全面介绍最大似然估计,并通过Python代码实战展示其具体应用。

一、基本原理

假设我们有一个统计模型,其参数为θ,并且我们有一组观测数据X。最大似然估计的目标是找到一个参数值θ_hat,使得在θ=θ_hat的条件下,观测数据X出现的概率(或概率密度)最大。这个概率(或概率密度)通常表示为L(θ; X),称为似然函数。

二、核心公式

似然函数

为了简化计算,我们通常使用对数似然函数。以下是核心公式的推导过程:

  1. 定义似然函数:

    L(θ; X) = P(X | θ)

  2. 取对数似然函数:

    l(θ; X) = log L(θ; X)

  3. 求导数并设导数为0,得到极值点:

    ∂l(θ; X) / ∂θ = 0

  4. 解方程得到参数估计值:

    θ_hat = argmax_θ L(θ; X)

三、步骤

  1. 定义似然函数:根据观测数据X和模型参数θ,定义似然函数L(θ; X)。对于离散数据,这通常是概率质量函数的乘积;对于连续数据,这通常是概率密度函数的乘积。

  2. 求对数似然函数:由于似然函数往往是多个概率的乘积,直接最大化这个乘积可能比较复杂。因此,通常取对数似然函数l(θ; X) = log L(θ; X),将对数的乘法转化为加法,从而简化计算。

  3. 最大化对数似然函数:通过对对数似然函数求导,找到使其最大的参数值θ_hat。这通常涉及到解一个或多个方程,或者使用数值优化方法。

  4. 得出参数估计值:将求得的θ_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()

效果如下:

总结

最大似然估计在许多情况下都非常有效,但它也有一些局限性。例如,当模型假设不正确或数据存在异常值时,最大似然估计可能会受到较大影响。此外,对于某些复杂的模型或数据分布,最大似然估计的计算可能非常困难或耗时。在这些情况下,可能需要考虑其他估计方法,如贝叶斯估计等。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号