递推最小二乘法(Recursive least square, RLS)详细推导

假设有数据 ( X , Y ) (X,Y) (X,Y),其中 X ∈ R m × d X \in {\mathbb{R}^{m \times d}} XRm×d Y ∈ R m × 1 Y \in {\mathbb{R}^{m \times 1}} YRm×1 m m m为样本数, d d d为特征数,考虑最小二乘解
θ 0 = ( X T X ) − 1 X T Y = Σ 0 − 1 X T Y (1) \begin{aligned}{\theta_0} = {\left( {{X^{\rm{T}}}X} \right)^{ - 1}}{X^{\rm{T}}}Y = {\Sigma_0}^{-1}{X^{\rm{T}}}Y \tag{1}\end{aligned} θ0=(XTX)1XTY=Σ01XTY(1)
⇒ Σ 0 θ 0 = X T Y (2) \Rightarrow {\Sigma_0}{\theta_0} = {X^{\rm{T}}}Y \tag{2} Σ0θ0=XTY(2)
当新数据 ( X 1 , Y 1 ) \left( {{X_1},{Y_1}} \right) (X1,Y1)到来时,更新模型,得到新的回归系数
θ 1 = ( [ X X 1 ] T [ X X 1 ] ) − 1 [ X X 1 ] T [ Y Y 1 ] = Σ 1 − 1 [ X X 1 ] T [ Y Y 1 ] (3) \begin{aligned} {\theta_1} &= {\left( {{{\left[ {\begin{array}{cc} X\\ {{X_1}} \end{array}} \right]}^{\rm{T}}}\left[ {\begin{array}{cc} X\\ {{X_1}} \end{array}} \right]} \right)^{ - 1}}{\left[ {\begin{array}{cc} X\\ {{X_1}} \end{array}} \right]^{\rm{T}}}\left[ {\begin{array}{cc} Y\\ {{Y_1}} \end{array}} \right] \\ &= {\Sigma _1}^{ - 1}{\left[ {\begin{array}{cc} X\\ {{X_1}} \end{array}} \right]^{\rm{T}}}\left[ {\begin{array}{cc} Y\\ {{Y_1}} \end{array}} \right]\tag{3} \end{aligned} θ1=([XX1]T[XX1])1[XX1]T[YY1]=Σ11[XX1]T[YY1](3)
其中
Σ 1 = [ X X 1 ] T [ X X 1 ] = X T X + X 1 T X 1 = Σ 0 + X 1 T X 1 (4) \begin{aligned} {\Sigma _1} &= {\left[ {\begin{array}{cc} X\\ {{X_1}} \end{array}} \right]^{\rm{T}}}\left[ {\begin{array}{cc} X\\ {{X_1}} \end{array}} \right] \\ &= {X^{\rm{T}}}X + X_1^{\rm{T}}{X_1} \\ &= {\Sigma _0} + X_1^{\rm{T}}{X_1} \end{aligned} \tag{4} Σ1=[XX1]T[XX1]=XTX+X1TX1=Σ0+X1TX1(4)
⇒ Σ 0 = Σ 1 − X 1 T X 1 (5) \begin{aligned} \Rightarrow {\Sigma _0} = {\Sigma _1} - X_1^{\rm{T}}{X_1} \end{aligned} \tag{5} Σ0=Σ1X1TX1(5)
根据公式(4)的结果,通过归纳可得
Σ k = Σ k − 1 + X k T X k (6) \begin{aligned} {\Sigma _k} = {\Sigma _{k - 1}} + X_k^{\rm{T}}{X_k} \end{aligned} \tag{6} Σk=Σk1+XkTXk(6)
[ X X 1 ] T [ Y Y 1 ] = X T Y + X 1 T Y 1 = Σ 0 θ 0 + X 1 T Y 1 / / 公 式 ( 2 ) 结 果 替 换 得 到 = ( Σ 1 − X 1 T X 1 ) θ 0 + X 1 T Y 1 / / 公 式 ( 5 ) 结 果 替 换 得 到 = Σ 1 θ 0 + X 1 T ( Y 1 − X 1 θ 0 ) (7) \begin{aligned} {\left[ {\begin{array}{cc} X\\ {{X_1}} \end{array}} \right]^{\rm{T}}}\left[ {\begin{array}{cc} Y\\ {{Y_1}} \end{array}} \right] &= {X^{\rm{T}}}Y + X_1^{\rm{T}}{Y_1}\\ &= {\Sigma _0}{\theta_0} + X_1^{\rm{T}}{Y_1} \quad //公式(2)结果替换得到\\ &= \left( {{\Sigma _1} - X_1^{\rm{T}}{X_1}} \right){\theta_0} + X_1^{\rm{T}}{Y_1} \quad //公式(5)结果替换得到\\ &= {\Sigma _1}{\theta_0} + X_1^{\rm{T}}\left( {{Y_1} - {X_1}{\theta_0}} \right) \end{aligned} \tag{7} [XX1]T[YY1]=XTY+X1TY1=Σ0θ0+X1TY1//(2)=(Σ1X1TX1)θ0+X1TY1//(5)=Σ1θ0+X1T(Y1X1θ0)(7)
将公式(7)回带到公式(3):
θ 1 = Σ 1 − 1 ( Σ 1 θ 0 + X 1 T ( Y 1 − X 1 θ 0 ) ) = θ 0 + Σ 1 − 1 X 1 T ( Y 1 − X 1 θ 0 ) (8) \begin{aligned} {\theta_1} &= {\Sigma _1}^{ - 1}\left( {{\Sigma _1}{\theta_0} + X_1^{\rm{T}}\left( {{Y_1} - {X_1}{\theta_0}} \right)} \right) \\ &= {\theta_0} + {\Sigma _1}^{ - 1}X_1^{\rm{T}}\left( {{Y_1} - {X_1}{\theta_0}} \right) \end{aligned} \tag{8} θ1=Σ11(Σ1θ0+X1T(Y1X1θ0))=θ0+Σ11X1T(Y1X1θ0)(8)
根据公式(8)的结果,通过归纳可得
θ k = θ k − 1 + Σ k − 1 X k T ( Y k − X k θ k − 1 ) (9) \begin{aligned} {\theta_k} = {\theta_{k - 1}} + {\Sigma _k}^{ - 1}X_k^{\rm{T}}\left( {{Y_k} - {X_k}{\theta_{k - 1}}} \right) \end{aligned} \tag{9} θk=θk1+Σk1XkT(YkXkθk1)(9)

到这里,已经能够实现对最小二乘的递推,其过程可概括如下,我们称为算法1:

  1. 根据公式(5)更新 Σ k = Σ k − 1 + X k T X k {\Sigma _k} = {\Sigma _{k - 1}} + X_k^{\rm{T}}{X_k} Σk=Σk1+XkTXk
  2. 根据公式(9)更新 θ k = θ k − 1 + Σ k − 1 X k T ( Y k − X k θ k − 1 ) {\theta_k} = {\theta_{k - 1}} + {\Sigma _k}^{ - 1}X_k^{\rm{T}}\left( {{Y_k} - {X_k}{\theta_{k - 1}}} \right) θk=θk1+Σk1XkT(YkXkθk1)

但以上过程存在两个问题:

  1. 对矩阵 Σ k \Sigma_k Σk的求逆计算复杂度比较高,我们能否在递推过程中避免对 Σ k \Sigma_k Σk的求逆计算,而直接更新它的逆矩阵;
  2. 矩阵 Σ k \Sigma_k Σk中的元素会随着数据量的增加不断增大,可能会发生数值溢出的问题。

针对以上问题,我们要对公式进一步改造,根据Sherman-Morrison-Woodbury公式:
( A + U V T ) − 1 = A − 1 − A − 1 U ( I + V T A − 1 U ) − 1 V T A − 1 {\left( {A + U{V^{\rm{T}}}} \right)^{ - 1}} = {A^{ - 1}} - {A^{ - 1}}U{\left( {I + {V^{\rm{T}}}{A^{ - 1}}U} \right)^{ - 1}}{V^{\rm{T}}}{A^{ - 1}} (A+UVT)1=A1A1U(I+VTA1U)1VTA1
公式(6)的逆可写成如下形式
Σ k − 1 = ( Σ k − 1 + X k T X k ) − 1 = Σ k − 1 − 1 − Σ k − 1 − 1 X k T ( I + X k Σ k − 1 − 1 X k T ) − 1 X k Σ k − 1 − 1 (10) \begin{aligned} {\Sigma _k}^{ - 1} &= {\left( {{\Sigma _{k - 1}} + X_k^{\rm{T}}{X_k}} \right)^{ - 1}} \\ &= \Sigma _{k - 1}^{ - 1} - \Sigma _{k - 1}^{ - 1}X_k^{\rm{T}}{\left( {I + {X_k}\Sigma _{k - 1}^{ - 1}X_k^{\rm{T}}} \right)^{ - 1}}{X_k}\Sigma _{k - 1}^{ - 1} \end{aligned} \tag{10} Σk1=(Σk1+XkTXk)1=Σk11Σk11XkT(I+XkΣk11XkT)1XkΣk11(10)
P k = ∑ k − 1 {P_k} = {\sum _k}^{ - 1} Pk=k1,公式(10)变为:
P k = P k − 1 − P k − 1 X k T ( I + X k P k − 1 X k T ) − 1 X k P k − 1 (11) \begin{aligned} {P_k} = {P_{k - 1}} - {P_{k - 1}}X_k^{\rm{T}}{\left( {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)^{ - 1}}{X_k}{P_{k - 1}} \end{aligned} \tag{11} Pk=Pk1Pk1XkT(I+XkPk1XkT)1XkPk1(11)
公式(9)变为:
θ k = θ k − 1 + P k X k T ( Y k − X k θ k − 1 ) (12) \begin{aligned} {\theta_k} = {\theta_{k - 1}} + {P_k}X_k^{\rm{T}}\left( {{Y_k} - {X_k}{\theta_{k - 1}}} \right) \end{aligned} \tag{12} θk=θk1+PkXkT(YkXkθk1)(12)
注意到,公式(11)依然存在对 I + X k P k − 1 X k T {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} I+XkPk1XkT的求逆运算,这似乎依然没有解决上述问题1,我们避免了对 Σ k \Sigma_k Σk的求逆,但却又引入了一个新的逆。事实上,如果数据是逐个到达的,则 X k X_k Xk为一个行向量(在本文中,一个样本我们用行向量表示,这主要是因为本文规定数据矩阵中每一行代表一个样本),因此 I + X k P k − 1 X k T {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} I+XkPk1XkT最终得到结果为一个数值,我们无需矩阵求逆计算,只需要取它的倒数就好了,即
P k = P k − 1 − P k − 1 X k T X k P k − 1 1 + X k P k − 1 X k T (13) \begin{aligned} {P_k} = {P_{k - 1}} - \frac{{{P_{k - 1}}X_k^{\rm{T}}{X_k}{P_{k - 1}}}}{{1 + {X_k}{P_{k - 1}}X_k^{\rm{T}}}} \end{aligned} \tag{13} Pk=Pk11+XkPk1XkTPk1XkTXkPk1(13)
于是我们得到了新的递推算法如下,我们称为算法2:

  1. 根据公式(13)更新 P k = P k − 1 − P k − 1 X k T X k P k − 1 1 + X k P k − 1 X k T ; {P_k} = {P_{k - 1}} - \frac{{{P_{k - 1}}X_k^{\rm{T}}{X_k}{P_{k - 1}}}}{{1 + {X_k}{P_{k - 1}}X_k^{\rm{T}}}}; Pk=Pk11+XkPk1XkTPk1XkTXkPk1
  2. 根据公式(12)更新 θ k = θ k − 1 + P k X k T ( Y k − X k θ k − 1 ) {\theta_k} = {\theta_{k - 1}} + {P_k}X_k^{\rm{T}}\left( {{Y_k} - {X_k}{\theta_{k - 1}}} \right) θk=θk1+PkXkT(YkXkθk1)

一些书上的递推算法可能并非这样的形式,我们可以进一步对上述过程进行一些整理。在一些书中, K k = P k X k T {K_k} = {P_k}X_k^{\rm{T}} Kk=PkXkT也被称为增益, Y k − X k θ k − 1 {Y_k} - {X_k}{\theta_{k - 1}} YkXkθk1被称为新息,顾名思义,就是引入的新信息。
K k = P k X k T = ( P k − 1 − P k − 1 X k T ( I + X k P k − 1 X k T ) − 1 X k P k − 1 ) X k T / / 公 式 ( 11 ) 结 果 替 换 得 到 = P k − 1 X k T ( I − ( I + X k P k − 1 X k T ) − 1 X k P k − 1 X k T ) = P k − 1 X k T ( I + X k P k − 1 X k T ) − 1 ( ( I + X k P k − 1 X k T ) − X k P k − 1 X k T ) = P k − 1 X k T ( I + X k P k − 1 X k T ) − 1 (14) \begin{aligned} {K_k} &= {P_k}X_k^{\rm{T}}\\ &= \left( {{P_{k - 1}} - {P_{k - 1}}X_k^{\rm{T}}{{\left( {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)}^{ - 1}}{X_k}{P_{k - 1}}} \right)X_k^{\rm{T}} \quad //公式(11)结果替换得到\\ &= {P_{k - 1}}X_k^{\rm{T}}\left( {I - {{\left( {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)}^{ - 1}}{X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)\\ &= {P_{k - 1}}X_k^{\rm{T}}{\left( {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)^{ - 1}}\left( {\left( {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right) - {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)\\ &= {P_{k - 1}}X_k^{\rm{T}}{\left( {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)^{ - 1}} \end{aligned} \tag{14} Kk=PkXkT=(Pk1Pk1XkT(I+XkPk1XkT)1XkPk1)XkT//(11)=Pk1XkT(I(I+XkPk1XkT)1XkPk1XkT)=Pk1XkT(I+XkPk1XkT)1((I+XkPk1XkT)XkPk1XkT)=Pk1XkT(I+XkPk1XkT)1(14)
将公式(14)的结果代入到公式(11)可得
P k = P k − 1 − K k X k P k − 1 = ( I − K k X k ) P k − 1 (15) \begin{aligned} {P_k} = {P_{k - 1}} - {K_k}{X_k}{P_{k - 1}} = \left( {I - {K_k}{X_k}} \right){P_{k - 1}} \end{aligned} \tag{15} Pk=Pk1KkXkPk1=(IKkXk)Pk1(15)
于是,算法2可进一步的写为如下形式,我们称为算法3:

  1. 根据公式(14)更新模型增益 K k = P k − 1 X k T ( I + X k P k − 1 X k T ) − 1 {K_k} = {P_{k - 1}}X_k^{\rm{T}}{\left( {I + {X_k}{P_{k - 1}}X_k^{\rm{T}}} \right)^{ - 1}} Kk=Pk1XkT(I+XkPk1XkT)1
  2. 根据公式(15)更新 P k = ( I − K k X k ) P k − 1 {P_k} = \left( {I - {K_k}{X_k}} \right){P_{k - 1}} Pk=(IKkXk)Pk1
  3. 更新回归系数 θ k = θ k − 1 + K k ( Y k − X k θ k − 1 ) {\theta_k} = {\theta_{k - 1}} + {K_k}\left( {{Y_k} - {X_k}{\theta_{k - 1}}} \right) θk=θk1+Kk(YkXkθk1)
  • 26
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
最小二乘法是一种用于拟合数据的数学方法,旨在找到一个最优解来最小化数据点与拟合曲线之间的误差平方和。在最小二乘法中,我们将数据表示为一个线性模型,并使用数据点和模型之间的差异来计算误差。然后,通过调整模型参数,使得误差最小化。 递推最小二乘法是在最小二乘法的基础上提出的一种改进方法。它的目标是通过仅使用新的数据点来更新模型参数,而无需重新计算整个数据集的最小二乘解。这样可以节省计算时间和存储空间。 递推最小二乘法的基本思想是利用递推关系式来更新模型参数。具体来说,我们可以通过递推更新公式来更新协方差矩阵和参数向量,从而避免对协方差矩阵的求逆操作。这可以大大降低计算复杂度。 然而,递推最小二乘法也存在一些问题。首先,对于协方差矩阵的递推更新可能导致数值溢出的问题,因为随着数据量的增加,矩阵中的元素会不断增大。其次,由于递推的特性,递推最小二乘法对数据的顺序具有一定的敏感性。如果数据的顺序发生变化,可能会影响到模型参数的更新。 总之,最小二乘法是一种常用的拟合方法,而递推最小二乘法是对最小二乘法的改进,通过递推更新公式来减少计算复杂度。但在使用递推最小二乘法时需要注意数值溢出和数据顺序的影响。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [递推最小二乘法(Recursive least square, RLS)详细推导](https://blog.csdn.net/qq_39645262/article/details/125691638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值