【机器学习】最大似然估计(MLE)和期望最大算法(EM)浅析

在这里插入图片描述

最大似然估计(Maximum Likelihood Estimation,MLE)

基本概念

最大似然估计是一种估计统计模型参数的方法,目的是找到使观测数据出现概率最大的参数值。换句话说,MLE 选择使观测数据最可能出现的参数值。对于给定数据集 X = { x 1 , x 2 , … , x n } X = \{x_1, x_2, \ldots, x_n\} X={x1,x2,,xn} 和参数 θ \theta θ,MLE 通过最大化似然函数 L ( θ ; X ) L(\theta; X) L(θ;X) 来估计参数:

L ( θ ; X ) = P ( X ∣ θ ) = ∏ i = 1 n P ( x i ∣ θ ) L(\theta; X) = P(X|\theta) = \prod_{i=1}^n P(x_i|\theta) L(θ;X)=P(Xθ)=i=1nP(xiθ)

为了简化计算,通常使用对数似然函数:

ℓ ( θ ; X ) = log ⁡ L ( θ ; X ) = ∑ i = 1 n log ⁡ P ( x i ∣ θ ) \ell(\theta; X) = \log L(\theta; X) = \sum_{i=1}^n \log P(x_i|\theta) (θ;X)=logL(θ;X)=i=1nlogP(xiθ)

通过最大化对数似然函数 ℓ ( θ ; X ) \ell(\theta; X) (θ;X) 来求得参数 θ \theta θ 的估计值。

例子:正态分布参数估计

对于一组来自正态分布 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2) 的样本数据,想要估计参数 μ \mu μ σ 2 \sigma^2 σ2。对于正态分布,似然函数为:

L ( μ , σ 2 ; X ) = ∏ i = 1 n 1 2 π σ 2 exp ⁡ ( − ( x i − μ ) 2 2 σ 2 ) L(\mu, \sigma^2; X) = \prod_{i=1}^n \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x_i - \mu)^2}{2\sigma^2}\right) L(μ,σ2;X)=i=1n2πσ2 1exp(2σ2(xiμ)2)

对数似然函数为:

ℓ ( μ , σ 2 ; X ) = − n 2 log ⁡ ( 2 π σ 2 ) − 1 2 σ 2 ∑ i = 1 n ( x i − μ ) 2 \ell(\mu, \sigma^2; X) = -\frac{n}{2} \log (2\pi\sigma^2) - \frac{1}{2\sigma^2} \sum_{i=1}^n (x_i - \mu)^2 (μ,σ2;X)=2nlog(2πσ2)2σ21i=1n(xiμ)2

通过对 μ \mu μ σ 2 \sigma^2 σ2 求导并设为零,可以得到参数的估计值:

μ ^ = 1 n ∑ i = 1 n x i \hat{\mu} = \frac{1}{n} \sum_{i=1}^n x_i μ^=n1i=1nxi
σ ^ 2 = 1 n ∑ i = 1 n ( x i − μ ^ ) 2 \hat{\sigma}^2 = \frac{1}{n} \sum_{i=1}^n (x_i - \hat{\mu})^2 σ^2=n1i=1n(xiμ^)2

MLE 的特点
  • 一致性:在大样本情况下,MLE 估计值会收敛于真实参数。
  • 渐进正态性:在大样本下,MLE 估计值的分布趋近于正态分布。
  • 高效性:在大样本下,MLE 是最优无偏估计,即它的方差达到 Cramer-Rao 下界。
Python实现
import numpy as np

# 生成样本数据
np.random.seed(0)
data = np.random.normal(loc=5, scale=2, size=1000)

# MLE估计
mu_hat = np.mean(data)
sigma_hat = np.std(data, ddof=1)

print(f"估计的均值: {mu_hat}")
print(f"估计的标准差: {sigma_hat}")

期望最大化算法(Expectation-Maximization,EM)

基本概念

EM算法是一种迭代方法,用于在存在隐变量或缺失数据的情形下估计模型参数。它包括两个主要步骤:期望步(E步)和最大化步(M步)。

  1. E步(Expectation Step):在给定当前参数估计值 θ ( t ) \theta^{(t)} θ(t) 的情况下,计算隐变量的期望值。
  2. M步(Maximization Step):在给定隐变量期望值的情况下,最大化对数似然函数,以更新参数估计值。
例子:高斯混合模型

对于一个包含两个高斯分布的混合模型,观测数据来自这两个分布,但不知道每个数据点来自哪个分布。因此目标是估计每个高斯分布的参数和混合权重。

  1. 初始化:随机初始化参数 θ = ( μ 1 , σ 1 , μ 2 , σ 2 , π ) \theta = (\mu_1, \sigma_1, \mu_2, \sigma_2, \pi) θ=(μ1,σ1,μ2,σ2,π)
  2. E步:计算每个数据点属于每个分布的概率(责任值):

γ i 1 = π 1 N ( x i ∣ μ 1 , σ 1 2 ) π 1 N ( x i ∣ μ 1 , σ 1 2 ) + π 2 N ( x i ∣ μ 2 , σ 2 2 ) \gamma_{i1} = \frac{\pi_1 \mathcal{N}(x_i | \mu_1, \sigma_1^2)}{\pi_1 \mathcal{N}(x_i | \mu_1, \sigma_1^2) + \pi_2 \mathcal{N}(x_i | \mu_2, \sigma_2^2)} γi1=π1N(xiμ1,σ12)+π2N(xiμ2,σ22)π1N(xiμ1,σ12)
γ i 2 = 1 − γ i 1 \gamma_{i2} = 1 - \gamma_{i1} γi2=1γi1

  1. M步:根据责任值更新参数:

m u 1 ( t + 1 ) = ∑ i = 1 n γ i 1 x i ∑ i = 1 n γ i 1 mu_1^{(t+1)} = \frac{\sum_{i=1}^n \gamma_{i1} x_i}{\sum_{i=1}^n \gamma_{i1}} mu1(t+1)=i=1nγi1i=1nγi1xi
σ 1 ( t + 1 ) 2 = ∑ i = 1 n γ i 1 ( x i − μ 1 ( t + 1 ) ) 2 ∑ i = 1 n γ i 1 \sigma_1^{(t+1)2} = \frac{\sum_{i=1}^n \gamma_{i1} (x_i - \mu_1^{(t+1)})^2}{\sum_{i=1}^n \gamma_{i1}} σ1(t+1)2=i=1nγi1i=1nγi1(xiμ1(t+1))2
π 1 ( t + 1 ) = 1 n ∑ i = 1 n γ i 1 \pi_1^{(t+1)} = \frac{1}{n} \sum_{i=1}^n \gamma_{i1} π1(t+1)=n1i=1nγi1
μ 2 ( t + 1 ) = ∑ i = 1 n γ i 2 x i ∑ i = 1 n γ i 2 \mu_2^{(t+1)} = \frac{\sum_{i=1}^n \gamma_{i2} x_i}{\sum_{i=1}^n \gamma_{i2}} μ2(t+1)=i=1nγi2i=1nγi2xi
σ 2 ( t + 1 ) 2 = ∑ i = 1 n γ i 2 ( x i − μ 2 ( t + 1 ) ) 2 ∑ i = 1 n γ i 2 \sigma_2^{(t+1)2} = \frac{\sum_{i=1}^n \gamma_{i2} (x_i - \mu_2^{(t+1)})^2}{\sum_{i=1}^n \gamma_{i2}} σ2(t+1)2=i=1nγi2i=1nγi2(xiμ2(t+1))2
π 2 ( t + 1 ) = 1 n ∑ i = 1 n γ i 2 \pi_2^{(t+1)} = \frac{1}{n} \sum_{i=1}^n \gamma_{i2} π2(t+1)=n1i=1nγi2

  1. 重复:重复E步和M步,直到参数收敛。
EM 算法的特点
  • 处理隐变量:EM 算法特别适用于有隐变量或不完全数据的情况。
  • 收敛性:EM 算法保证每次迭代都不会降低似然函数的值,但不保证找到全局最优解。
  • 应用广泛:EM 算法在聚类(如高斯混合模型)、图像恢复、缺失数据填充等领域有广泛应用。
Python实现
import numpy as np
from scipy.stats import norm

# 生成样本数据
np.random.seed(0)
data = np.concatenate([np.random.normal(5, 1, 300), np.random.normal(10, 2, 700)])

# 初始化参数
mu1, sigma1, pi1 = 4, 1, 0.5
mu2, sigma2, pi2 = 8, 1, 0.5

# EM算法
def em_algorithm(data, mu1, sigma1, pi1, mu2, sigma2, pi2, tol=1e-6, max_iter=100):
    for _ in range(max_iter):
        # E步
        gamma1 = pi1 * norm.pdf(data, mu1, sigma1)
        gamma2 = pi2 * norm.pdf(data, mu2, sigma2)
        gamma_sum = gamma1 + gamma2
        gamma1 /= gamma_sum
        gamma2 /= gamma_sum
        
        # M步
        mu1_new = np.sum(gamma1 * data) / np.sum(gamma1)
        sigma1_new = np.sqrt(np.sum(gamma1 * (data - mu1_new)**2) / np.sum(gamma1))
        pi1_new = np.mean(gamma1)
        
        mu2_new = np.sum(gamma2 * data) / np.sum(gamma2)
        sigma2_new = np.sqrt(np.sum(gamma2 * (data - mu2_new)**2) / np.sum(gamma2))
        pi2_new = np.mean(gamma2)
        
        # 检查收敛
        if np.abs(mu1_new - mu1) < tol and np.abs(mu2_new - mu2) < tol:
            break
        
        mu1, sigma1, pi1 = mu1_new, sigma1_new, pi1_new
        mu2, sigma2, pi2 = mu2_new, sigma2_new, pi2_new
    
    return mu1, sigma1, pi1, mu2, sigma2, pi2

mu1, sigma1, pi1, mu2, sigma2, pi2 = em_algorithm(data, mu1, sigma1, pi1, mu2, sigma2, pi2)
print(f"估计的均值1: {mu1}, 标准差1: {sigma1}, 混合系数1: {pi1}")
print(f"估计的均值2: {mu2}, 标准差2: {sigma2}, 混合系数2: {pi2}")

总结

  • 极大似然估计(MLE)是一种直接通过最大化似然函数来估计模型参数的方法,适用于完全观测的数据。MLE 通过最大化观测数据的对数似然函数来找到最优参数。
  • 最大期望算法(EM)是一种迭代优化算法,适用于存在隐变量或不完全数据的情况。EM 通过交替执行期望步骤(计算隐变量的期望对数似然函数)和最大化步骤(最大化期望对数似然函数)来逐步优化参数估计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值