目录
最大似然估计(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=1∏nP(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=1∑nlogP(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=1∏n2πσ21exp(−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=1∑n(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=1∑nxi
σ
^
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=1∑n(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步)。
- E步(Expectation Step):在给定当前参数估计值 θ ( t ) \theta^{(t)} θ(t) 的情况下,计算隐变量的期望值。
- M步(Maximization Step):在给定隐变量期望值的情况下,最大化对数似然函数,以更新参数估计值。
例子:高斯混合模型
对于一个包含两个高斯分布的混合模型,观测数据来自这两个分布,但不知道每个数据点来自哪个分布。因此目标是估计每个高斯分布的参数和混合权重。
- 初始化:随机初始化参数 θ = ( μ 1 , σ 1 , μ 2 , σ 2 , π ) \theta = (\mu_1, \sigma_1, \mu_2, \sigma_2, \pi) θ=(μ1,σ1,μ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
- 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γi1∑i=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γi1∑i=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=1∑nγ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γi2∑i=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γi2∑i=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=1∑nγi2
- 重复:重复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 通过交替执行期望步骤(计算隐变量的期望对数似然函数)和最大化步骤(最大化期望对数似然函数)来逐步优化参数估计。