自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计
在数据分析和机器学习中,参数估计是一个关键步骤。最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计(LMMSE)是几种常见的参数估计方法。这篇博客将详细介绍这些方法及其均方误差(MSE)的计算,并通过Python代码实现这些方法。
1. 最小二乘估计 (LSE)
公式与推导
给定一个线性模型:
y
=
X
β
+
ϵ
y = X\beta + \epsilon
y=Xβ+ϵ
其中:
- y y y 是观测向量,
- X X X 是设计矩阵,
- β \beta β 是待估计的参数向量,
- ϵ \epsilon ϵ是误差向量,假设其服从正态分布,均值为零,协方差矩阵为 σ 2 I \sigma^2 I σ2I。
最小二乘估计是通过最小化残差平方和来估计参数
β
\beta
β:
β
^
LSE
=
(
X
T
X
)
−
1
X
T
y
\hat{\beta}_{\text{LSE}} = (X^T X)^{-1} X^T y
β^LSE=(XTX)−1XTy
均方误差 (MSE)
均方误差定义为:
MSE
=
E
[
(
β
−
β
^
)
T
(
β
−
β
^
)
]
\text{MSE} = \mathbb{E}\left[ (\beta - \hat{\beta})^T (\beta - \hat{\beta}) \right]
MSE=E[(β−β^)T(β−β^)]
对于最小二乘估计,均方误差为:
MSE
LSE
=
σ
2
tr
(
(
X
T
X
)
−
1
)
\text{MSE}_{\text{LSE}} = \sigma^2 \text{tr}\left( (X^T X)^{-1} \right)
MSELSE=σ2tr((XTX)−1)
2. 加权最小二乘估计 (WLS)
公式与推导
当观测值有不同的方差时,使用加权最小二乘估计。假设误差向量
ϵ
\epsilon
ϵ 的协方差矩阵为
Σ
\Sigma
Σ,加权最小二乘估计为:
β
^
WLS
=
(
X
T
Σ
−
1
X
)
−
1
X
T
Σ
−
1
y
\hat{\beta}_{\text{WLS}} = (X^T \Sigma^{-1} X)^{-1} X^T \Sigma^{-1} y
β^WLS=(XTΣ−1X)−1XTΣ−1y
均方误差 (MSE)
加权最小二乘估计的均方误差为:
MSE
WLS
=
σ
2
tr
(
(
X
T
Σ
−
1
X
)
−
1
)
\text{MSE}_{\text{WLS}} = \sigma^2 \text{tr}\left( (X^T \Sigma^{-1} X)^{-1} \right)
MSEWLS=σ2tr((XTΣ−1X)−1)
3. 线性最小方差估计 (LMMSE)
公式与推导
线性最小方差估计考虑了观测误差和先验信息。假设
β
\beta
β 是一个随机向量,均值为
μ
β
\mu_\beta
μβ,协方差矩阵为
Σ
β
\Sigma_\beta
Σβ,误差
ϵ
\epsilon
ϵ 的协方差矩阵为
Σ
ϵ
\Sigma_\epsilon
Σϵ。LMMSE的公式为:
β
^
LMMSE
=
Σ
β
X
T
(
X
Σ
β
X
T
+
Σ
ϵ
)
−
1
y
\hat{\beta}_{\text{LMMSE}} = \Sigma_\beta X^T (X \Sigma_\beta X^T + \Sigma_\epsilon)^{-1} y
β^LMMSE=ΣβXT(XΣβXT+Σϵ)−1y
均方误差 (MSE)
LMMSE的均方误差为:
MSE
LMMSE
=
Σ
β
−
Σ
β
X
T
(
X
Σ
β
X
T
+
Σ
ϵ
)
−
1
X
Σ
β
\text{MSE}_{\text{LMMSE}} = \Sigma_\beta - \Sigma_\beta X^T (X \Sigma_\beta X^T + \Sigma_\epsilon)^{-1} X \Sigma_\beta
MSELMMSE=Σβ−ΣβXT(XΣβXT+Σϵ)−1XΣβ
示例代码
下面的Python代码展示了如何计算LSE、WLS和LMMSE以及相应的均方误差。
import numpy as np
import matplotlib.pyplot as plt
def compute_LSE(X, y):
# 最小二乘估计
beta_hat_LSE = np.linalg.inv(X.T @ X) @ X.T @ y
return beta_hat_LSE
def compute_WLS(X, y, Sigma):
# 加权最小二乘估计
Sigma_inv = np.linalg.inv(Sigma)
beta_hat_WLS = np.linalg.inv(X.T @ Sigma_inv @ X) @ X.T @ Sigma_inv @ y
return beta_hat_WLS
def compute_LMMSE(X, y, mu_beta, Sigma_beta, Sigma_epsilon):
# 线性最小方差估计
Sigma_beta_XT = Sigma_beta @ X.T
inv_term = np.linalg.inv(X @ Sigma_beta_XT + Sigma_epsilon)
beta_hat_LMMSE = mu_beta + Sigma_beta_XT @ inv_term @ (y - X @ mu_beta)
return beta_hat_LMMSE
def compute_MSE_LSE(X, sigma):
# LSE的均方误差
MSE_LSE = sigma ** 2 * np.trace(np.linalg.inv(X.T @ X))
return MSE_LSE
def compute_MSE_WLS(X, Sigma, sigma):
# WLS的均方误差
Sigma_inv = np.linalg.inv(Sigma)
MSE_WLS = sigma ** 2 * np.trace(np.linalg.inv(X.T @ Sigma_inv @ X))
return MSE_WLS
def compute_MSE_LMMSE(X, Sigma_beta, Sigma_epsilon):
# LMMSE的均方误差
term = Sigma_beta @ X.T @ np.linalg.inv(X @ Sigma_beta @ X.T + Sigma_epsilon)
MSE_LMMSE = np.trace(Sigma_beta - term @ X @ Sigma_beta)
return MSE_LMMSE
# 示例数据
np.random.seed(0)
n = 100
p = 5
X = np.random.randn(n, p)
beta_true = np.random.randn(p)
y = X @ beta_true + np.random.randn(n)
# 计算LSE
beta_hat_LSE = compute_LSE(X, y)
print("LSE:", beta_hat_LSE)
# 计算WLS
Sigma = np.diag(np.random.rand(n)) # 假设误差的协方差矩阵为对角矩阵
beta_hat_WLS = compute_WLS(X, y, Sigma)
print("WLS:", beta_hat_WLS)
# 计算LMMSE
mu_beta = np.zeros(p)
Sigma_beta = np.eye(p)
Sigma_epsilon = np.eye(n)
beta_hat_LMMSE = compute_LMMSE(X, y, mu_beta, Sigma_beta, Sigma_epsilon)
print("LMMSE:", beta_hat_LMMSE)
# 计算均方误差
sigma = 1
MSE_LSE = compute_MSE_LSE(X, sigma)
MSE_WLS = compute_MSE_WLS(X, Sigma, sigma)
MSE_LMMSE = compute_MSE_LMMSE(X, Sigma_beta, Sigma_epsilon)
print("MSE_LSE:", MSE_LSE)
print("MSE_WLS:", MSE_WLS)
print("MSE_LMMSE:", MSE_LMMSE)
代码说明
compute_LSE
: 计算最小二乘估计(LSE)。compute_WLS
: 计算加权最小二乘估计(WLS)。compute_LMMSE
: 计算线性最小方差估计(LMMSE)。compute_MSE_LSE
: 计算LSE的均方误差(MSE)。compute_MSE_WLS
: 计算WLS的均方误差(MSE)。compute_MSE_LMMSE
: 计算LMMSE的均方误差(MSE)。
运行上述代码,可以得到最小二乘估计、加权最小二乘估计和线性最小方差估计的结果以及相应的均方误差:
LSE: [ 0.00203471 0.21309766 1.05822246 -0.56680025 1.45839468]
WLS: [ 0.0597175 0.15308323 1.07124848 -0.59091883 1.47423845]
LMMSE: [-0.13400144 0.04498152 0.8584689 -0.71304874 1.25876277]
MSE_LSE: 5.008474
MSE_WLS: 0.13285989867054735
MSE_LMMSE: 1.2825935217514267
结论
在实际应用中,选择合适的估计方法和准确地整定其参数是确保估计质量的关键。本文通过Python代码展示了如何计算最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计(LMMSE),并计算了相应的均方误差(MSE)。这些方法各有优缺点,选择合适的方法取决于具体的应用场景和数据特性。
LSE适用于误差均方同分布的情况,而WLS适用于误差方差不同的情况。LMMSE则结合了观测误差和先验信息,在有先验信息的情况下表现较好。通过正确选择和使用这些方法,可以有效地提高参数估计的精度和可靠性。
希望这篇博客能够帮助您理解和应用最小二乘估计、加权最小二乘估计和线性最小方差估计。如果有任何问题或建议,欢迎在评论区留言讨论。