首页 > 其他分享 >自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计

自动控制: 最小二乘估计(LSE)、加权最小二乘估计(WLS)和线性最小方差估计

时间:2024-05-29 13:34:21浏览次数:21  
标签:LSE WLS 最小 beta 估计 LMMSE MSE Sigma 二乘

自动控制: 最小二乘估计(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)

代码说明

  1. compute_LSE: 计算最小二乘估计(LSE)。
  2. compute_WLS: 计算加权最小二乘估计(WLS)。
  3. compute_LMMSE: 计算线性最小方差估计(LMMSE)。
  4. compute_MSE_LSE: 计算LSE的均方误差(MSE)。
  5. compute_MSE_WLS: 计算WLS的均方误差(MSE)。
  6. 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则结合了观测误差和先验信息,在有先验信息的情况下表现较好。通过正确选择和使用这些方法,可以有效地提高参数估计的精度和可靠性。

希望这篇博客能够帮助您理解和应用最小二乘估计、加权最小二乘估计和线性最小方差估计。如果有任何问题或建议,欢迎在评论区留言讨论。

标签:LSE,WLS,最小,beta,估计,LMMSE,MSE,Sigma,二乘
From: https://blog.csdn.net/weixin_39753819/article/details/139234738

相关文章