什么是最大似然估计

问题:什么是最大似然估计?

介绍

最大似然估计(Maximum Likelihood Estimation,MLE)是一种常用的统计方法,用于估计概率分布的参数。它的基本思想是,通过找到使观测样本发生的概率最大化的参数值,来估计真实数据的概率分布参数。

在统计学中,我们通常使用参数化的概率分布来描述数据的生成过程。最大似然估计通过最大化给定观测数据的似然函数(likelihood function),找到最有可能生成观测数据的模型参数。

最大似然估计的应用非常广泛,例如线性回归、逻辑回归以及深度学习中的神经网络等都使用了最大似然估计。

算法原理

假设我们有一个参数化的概率分布函数 $P(x|\theta)$,其中 $x$ 是观测样本,$\theta$ 是待估计的参数。我们的目标是找到一个参数值 $\theta_{MLE}$,使得给定观测样本 $x$ 的条件下,概率 $P(x|\theta_{MLE})$ 达到最大。

概率分布函数 $P$ 通常由一个概率密度函数(对于连续分布)或一个概率质量函数(对于离散分布)表示。对于多个独立且同分布的观测样本,其似然函数可以表示为各个观测样本概率的乘积:

$$L(\theta) = P(x_1|\theta) \cdot P(x_2|\theta) \cdot P(x_3|\theta) \cdot … \cdot P(x_n|\theta)$$

其中,$L(\theta)$ 是似然函数。

为了便于推导,我们通常使用对数似然函数(对数是单调递增的):

$$\log L(\theta) = \log P(x_1|\theta) + \log P(x_2|\theta) + \log P(x_3|\theta) + … + \log P(x_n|\theta)$$

最大似然估计的目标是最大化对数似然函数。

公式推导

推导过程中,我们通常使用普通的 LaTeX 格式的公式。以下是推导最大似然估计的公式推导:

根据前面的介绍,似然函数的对数为:

$$\log L(\theta) = \log P(x_1|\theta) + \log P(x_2|\theta) + \log P(x_3|\theta) + … + \log P(x_n|\theta)$$

最大似然估计的目标是最大化对数似然函数,即找到使对数似然函数最大的参数 $\theta_{MLE}$。为了方便计算,通常使用梯度下降或牛顿法等优化算法找到最大值。

计算步骤

推导完成后,我们可以使用以下步骤来计算最大似然估计的参数值:

  1. 选择一个参数化的概率分布函数 $P(x|\theta)$,并定义似然函数 $L(\theta)$。
  2. 对似然函数取对数($\log L(\theta)$)。
  3. 计算对数似然函数的导数,并令导数等于零,得到关于参数 $\theta$ 的方程(通常使用优化算法来计算最值)。
  4. 解方程得到参数 $\theta_{MLE}$ 的值。
  5. 根据参数 $\theta_{MLE}$ 得到估计的概率分布函数。

Python代码示例

下面是使用Python实现的最大似然估计示例。我们使用一个虚拟数据集和高斯分布作为概率分布函数的例子。

首先,我们需要导入所需的库和模块:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

定义一个高斯分布的概率密度函数和样本数据:

# 高斯分布参数
mu_true = 5.0
sigma_true = 2.0

# 生成高斯分布样本数据
np.random.seed(0)
data = np.random.normal(mu_true, sigma_true, size=1000)

确定似然函数(高斯分布函数的乘积):

def likelihood(mu, sigma):
 return np.prod(stats.norm.pdf(data, loc=mu, scale=sigma))

计算似然函数的对数(以便于计算和优化):

def log_likelihood(mu, sigma):
 return np.log(likelihood(mu, sigma))

通过最大化对数似然函数,计算参数估计值:

# 初始化参数的初始值
mu_initial = 0.0
sigma_initial = 1.0

# 使用优化算法找到最大对数似然函数的参数值
result = minimize(lambda params: -log_likelihood(params['mu'], params['sigma']),
 {'mu': mu_initial, 'sigma': sigma_initial})

# 提取参数估计值
mu_mle = result['x'][0]
sigma_mle = result['x'][1]

绘制原始数据和最大似然估计的高斯分布曲线:

# 绘制原始数据
plt.hist(data, bins=50, density=True, alpha=0.75, label='Data')
# 绘制最大似然估计的高斯分布曲线
x = np.linspace(min(data), max(data), 100)
y = stats.norm.pdf(x, loc=mu_mle, scale=sigma_mle)
plt.plot(x, y, 'r-', label='MLE Gaussian')

plt.xlabel('Value')
plt.ylabel('Density')
plt.title('Maximum Likelihood Estimation')
plt.legend()
plt.show()

代码细节解释

在这个示例中,我们首先生成一个高斯分布的虚拟样本数据,然后定义了概率密度函数和似然函数。接着,我们使用 scipy.optimize.minimize 函数来最大化对数似然函数,得到估计的参数值。最后,我们绘制了原始数据和最大似然估计得到的高斯分布曲线。

在估计参数的过程中,我们使用了 minimize 函数来最大化对数似然函数。minimize 函数使用了优化算法(默认为BFGS算法),并接受一个目标函数和初始参数值作为输入,并返回最优解。

通过最大似然估计,我们得到了估计的高斯分布参数(均值和标准差),并将其绘制成曲线,将其与原始数据进行对比。

注意,这个示例只是展示了一个简单的最大似然估计的实现,实际应用中可能会有更复杂的情况和更多的技巧。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/821988/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球