权重变化时加权最小二乘回归的有效重新计算



我正在执行wiki:WLS 上描述的加权最小二乘回归

我需要解这个方程:$B=(t(X)WX)^{-1}*t(X)Wy$

我使用SVD找到:$(t(X)WX)^{-1}$并将其存储在矩阵中。此外,我存储矩阵$H=(t(X)WX)^{-1}*t(X)W$,并简单地对y的任何新值执行以下操作:B=Hy。通过这种方式,我可以节省在y变化时重复SVD和矩阵乘法的成本。

W是对角矩阵,并且通常不改变。然而,有时我会改变W矩阵中对角线上的一个或两个元素。在这种情况下,我需要再次进行SVD并重新计算H矩阵。这显然是缓慢和耗时的。

我的问题是:如果我知道W发生了什么变化,而X没有变化,有没有更有效的方法来重新计算(t(X)WX)^-1?

或者换言之,在W中只有对角元素可以改变已知量的情况下,有没有一种有效的分析方法可以找到B?

有这样一种方法,如果你计算的逆是真逆,而不是广义逆(即奇异值都不是0)。但是,建议在使用时要小心。如果你在做无限精确的算术,一切都会好起来的。对于有限精度,特别是对于几乎奇异的问题——如果一些奇异值非常大——这些公式可能会导致精度损失。

我称之为逆,你存储C。如果你把d(可以是正的或负的)加到第m个权重上,那么修改后的C矩阵,比如C~,和修改后的H,H~,可以这样计算:

('表示转置,e_m是行——除了第m个槽是1之外,所有为0的向量)

c = the m'th column of H, divided by the original m'th weight    
a = m'th row of the data matrix X    
f = e_m - a*H    
gamma = 1/d + a*c

(所以c是列向量,而a和f是行向量)

然后

C~ = C - c*c'/gamma
H~ = H + c*f/gamma

如果你想找到新的B,比如说,对于给定的y,它可以通过计算

r = y[m] - a*B
B~ = B + (r/gamma) * c

这些公式的推导是简单而乏味的矩阵代数。矩阵反演引理派上用场。

最新更新