• 概率基础——极大似然估计


    概率基础——极大似然估计

    引言

    极大似然估计(Maximum Likelihood Estimation,简称MLE)是统计学中最常用的参数估计方法之一,它通过最大化样本的似然函数来估计参数值,以使得样本出现的概率最大化。极大似然估计在各个领域都有着广泛的应用,例如机器学习、生物统计学、金融等。本文将介绍极大似然估计的理论基础、公式推导过程,并通过案例和Python代码进行实现和模拟,以帮助读者更好地理解这一重要的概率基础知识。

    理论及公式

    极大似然估计的基本思想

    极大似然估计的基本思想是:在给定样本的情况下,找到一个参数值,使得观察到这个样本的概率最大。假设我们有一个参数为 θ \theta θ的模型,记为 P ( X ∣ θ ) P(X|\theta) P(Xθ),其中 X X X是样本, θ \theta θ是参数。那么, θ \theta θ的极大似然估计 θ ^ \hat{\theta} θ^可以通过最大化似然函数 L ( θ ) L(\theta) L(θ)来求得,即:

    θ ^ = arg ⁡ max ⁡ θ   L ( θ ) \hat{\theta} = \underset{\theta}{\arg \max} \, L(\theta) θ^=θargmaxL(θ)

    似然函数

    似然函数 L ( θ ) L(\theta) L(θ)表示在给定参数 θ \theta θ 下观察到样本 X X X的概率密度函数(或概率质量函数)的乘积。对于连续型随机变量,似然函数通常表示为概率密度函数的连乘积;对于离散型随机变量,似然函数通常表示为概率质量函数的连乘积。

    对数似然函数

    在实际应用中,通常使用对数似然函数(Log-Likelihood Function)来简化计算,因为连乘积的求导相对繁琐,而连加的求导更加简单。对数似然函数 ℓ ( θ ) \ell(\theta) (θ) 定义为似然函数的自然对数:

    ℓ ( θ ) = log ⁡ L ( θ ) \ell(\theta) = \log L(\theta) (θ)=logL(θ)

    极大似然估计的求解

    要找到极大似然估计 θ ^ \hat{\theta} θ^,我们需要对对数似然函数 ℓ ( θ ) \ell(\theta) (θ)求导,并令导数等于零,求解得到的解即为估计值。

    d ℓ ( θ ) d θ = 0 \frac{d\ell(\theta)}{d\theta} = 0 dθd(θ)=0

    例子

    下面我们通过一个简单的例子来说明极大似然估计的应用。假设我们有一个硬币,想要估计出正面朝上的概率 p p p。我们连续地抛掷这个硬币,观察到正面朝上 k k k次,总共抛掷了 n n n 次。我们希望通过这些观察结果来估计正面朝上的概率 p p p

    案例

    极大似然估计硬币的正面朝上概率

    假设我们连续抛掷一个硬币10次,观察到有7次正面朝上和3次反面朝上。我们想要估计出正面朝上的概率 ( p )。根据二项分布的概率密度函数,我们可以得到似然函数:

    L ( p ) = ( 10 7 ) p 7 ( 1 − p ) 3 L(p) = \binom{10}{7} p^7 (1-p)^3 L(p)=(710)p7(1p)3

    我们可以求得对数似然函数:

    ℓ ( p ) = log ⁡ L ( p ) = log ⁡ ( 10 7 ) + 7 log ⁡ p + 3 log ⁡ ( 1 − p ) \ell(p) = \log L(p) = \log \binom{10}{7} + 7 \log p + 3 \log (1-p) (p)=logL(p)=log(710)+7logp+3log(1p)

    接下来,我们对对数似然函数求导,并令导数等于零,求解得到的解即为估计值 p ^ \hat{p} p^

    Python模拟与绘图

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import minimize_scalar
    
    # 定义对数似然函数
    def log_likelihood(p, n, k):
        return np.log(np.math.comb(n, k)) + k * np.log(p) + (n - k) * np.log(1 - p)
    
    # 定义负对数似然函数(因为 minimize_scalar 函数寻找最小值)
    def neg_log_likelihood(p, n, k):
        return -log_likelihood(p, n, k)
    
    # 模拟抛硬币实验
    n_trials = 10  # 抛硬币的总次数
    k_heads = 7  # 正面朝上的次数
    
    # 最大化对数似然函数来估计正面朝上的概率
    result = minimize_scalar(neg_log_likelihood, args=(n_trials, k_heads), bounds=(0, 1), method='bounded')
    estimated_p = result.x
    
    # 绘制结果
    p_values = np.linspace(0, 1, 100)
    likelihoods = [np.exp(log_likelihood(p, n_trials, k_heads)) for p in p_values]
    
    plt.plot(p_values, likelihoods)
    plt.axvline(x=estimated_p, color='r', linestyle='--', label='Estimated p: {:.3f}'.format(estimated_p))
    plt.xlabel('p')
    plt.ylabel('Likelihood')
    plt.title('Likelihood Function')
    plt.legend()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这里插入图片描述

    以上代码首先定义了对数似然函数和负对数似然函数,然后利用 minimize_scalar 函数来最大化对数似然函数,并求解得到正面朝上概率 p ^ = 0.7 \hat{p}=0.7 p^=0.7。根据图像可以看出,估计的概率密度函数与观测数据的分布情况较为吻合。

    结论

    通过本文的介绍,我们了解了极大似然估计的基本理论、推导过程,并通过一个案例演示了如何使用Python实现对极大似然估计的模拟,并绘制出相应的图像进行说明。

  • 相关阅读:
    Java编程题(完数)
    Kafka基本原理、生产问题总结及性能优化实践 | 京东云技术团队
    【学习笔记】空间坐标系旋转与四元数
    第十九章 ObjectScript 应用程序中的数值计算 - 选择数字格式
    【JAVA】快速排序
    typescript 基础一篇掌握(一万四千字攻略总结)
    CVE-2022-22963 Spring Cloud Function SpEL命令注入
    聚观早报|歌尔股份辟谣被苹果砍单;扎克伯格承认因失误裁员
    LeetCode刷题复盘笔记—一文搞懂62. 不同路径 && 63. 不同路径 II(动态规划系列第三篇)
    pycharm中运行jupyter notebook
  • 原文地址:https://blog.csdn.net/weixin_39753819/article/details/136367876