美文网首页
机器学习-极大似然估计

机器学习-极大似然估计

作者: 阿凡提说AI | 来源:发表于2024-09-30 02:01 被阅读0次

    极大似然估计详解

    极大似然估计 (Maximum Likelihood Estimation,MLE) 是统计学中常用的参数估计方法,用于根据样本数据来估计模型参数,使得模型能够最大程度地解释观测到的数据。

    1. 基本原理

    假设我们有一个随机变量 X,其概率分布由参数 θ 控制,例如正态分布的均值和方差。现在,我们得到了来自该分布的 n 个样本数据 X1, X2, ..., Xn。极大似然估计的目标就是找到参数 θ 的估计值 θ̂,使得在该参数下,观测到这 n 个样本数据的概率最大。

    换句话说,极大似然估计就是寻找一个参数 θ,使得它能够最大程度地解释观测到的样本数据。

    2. 核心公式

    极大似然估计的核心公式如下:

    θ̂ = argmax(L(θ; X1, X2, ..., Xn))
    

    其中:

    • θ̂ 是参数 θ 的估计值。
    • L(θ; X1, X2, ..., Xn) 是似然函数,表示在参数 θ 下,观测到样本数据 X1, X2, ..., Xn 的概率。
    • argmax 表示找到使得似然函数 L(θ; X1, X2, ..., Xn) 取最大值的 θ 值。

    3. 算法步骤

    1. 构建似然函数: 根据数据分布和参数 θ,构建似然函数 L(θ; X1, X2, ..., Xn)。
    2. 求导: 对似然函数求关于参数 θ 的导数,得到导数函数 ∂L(θ; X1, X2, ..., Xn) / ∂θ。
    3. 解方程: 将导数函数设为 0,并解方程,求得参数 θ 的估计值 θ̂。

    4. 例子:估计正态分布的均值和方差

    假设我们有 n 个样本数据 X1, X2, ..., Xn,它们来自均值为 μ、方差为 σ² 的正态分布。

    1. 构建似然函数:

    L(μ, σ²; X1, X2, ..., Xn) = ∏(1 / (σ√(2π)) * exp(-(Xi - μ)² / (2σ²)))
    

    2. 求导:

    对似然函数求关于 μ 和 σ² 的偏导数,得到导数函数:

    ∂L / ∂μ = ∑((Xi - μ) / σ²)
    ∂L / ∂σ² = -n / (2σ²) + ∑((Xi - μ)² / (2σ⁴))
    

    3. 解方程:

    将导数函数设为 0,解方程得到参数 μ 和 σ² 的估计值:

    μ̂ = (∑Xi) / n
    σ̂² = (∑(Xi - μ̂)²) / n
    

    5. 优缺点

    优点:

    • 理论基础扎实,具有较强的理论依据。
    • 计算方法简单,易于实现。

    缺点:

    • 可能存在多个极值点,需要判断哪个极值点是全局最大值。
    • 对样本数据分布有较强的假设,如果样本数据分布与假设的分布不一致,则估计结果可能不准确。
    • 当样本数据量较小时,估计结果可能不稳定。

    6. 总结

    极大似然估计是一种简单有效的参数估计方法,在许多实际问题中都有广泛的应用。但需要注意其适用范围和局限性,并结合其他方法来进行参数估计。

    7. 其他说明

    • 极大似然估计的本质是最大化观测到样本数据的概率,因此它与信息论中的最大熵原理有一定的联系。
    • 在机器学习中,极大似然估计常被用来训练模型参数,例如逻辑回归、朴素贝叶斯等。
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import minimize
    
    # 生成模拟数据
    np.random.seed(42)
    data = np.random.normal(loc=5, scale=2, size=100)
    
    # 定义似然函数
    def likelihood(params, data):
        """
        计算似然函数值。
    
        Args:
            params: 参数列表,包含均值 mu 和 标准差 sigma
            data: 观测数据
    
        Returns:
            似然函数值
        """
        mu, sigma = params
        return 1 / (sigma * np.sqrt(2 * np.pi)) * np.exp(-(data - mu)**2 / (2 * sigma**2))
    
    # 定义负对数似然函数
    def negative_log_likelihood(params, data):
        """
        计算负对数似然函数值。
    
        Args:
            params: 参数列表,包含均值 mu 和 标准差 sigma
            data: 观测数据
    
        Returns:
            负对数似然函数值
        """
        return -np.sum(np.log(likelihood(params, data)))
    
    # 使用最小化函数寻找参数
    initial_guess = [0, 1]  # 初始化参数
    result = minimize(negative_log_likelihood, initial_guess, args=(data,))
    
    # 获取最大似然估计参数
    mu_hat, sigma_hat = result.x
    
    # 打印结果
    print(f"估计的均值: {mu_hat}")
    print(f"估计的标准差: {sigma_hat}")
    
    # 可视化结果
    plt.hist(data, bins=20, density=True, alpha=0.5, label="数据分布")
    x = np.linspace(data.min() - 1, data.max() + 1, 100)
    y = 1 / (sigma_hat * np.sqrt(2 * np.pi)) * np.exp(-(x - mu_hat)**2 / (2 * sigma_hat**2))
    plt.plot(x, y, label="最大似然估计的正态分布")
    plt.legend()
    plt.title("最大似然估计结果")
    plt.show()
    

    相关文章

      网友评论

          本文标题:机器学习-极大似然估计

          本文链接:https://www.haomeiwen.com/subject/xljlrjtx.html