2012-11-14 60 views
1

我執行加權最小二乘迴歸作爲wiki: WLS加權最小二乘迴歸的有效再計算時的權重改變

描述我需要解決這個等式:$ B =(T(X)W¯¯ X)^ { -1} * T(X)W¯¯ Y $

我用SVD找到:$(T(X)W¯¯ X)^ { - 1} $並將其存儲在一個矩陣。此外,我存儲矩陣$ H =(T(X)W¯¯ X)^ { - 1} * T(X)W¯¯$和簡單地做用於Y的任何新的值如下:B = H年。通過這種方式,我可以節省重複SVD和矩陣乘法的成本。

W是對角矩陣,一般不會發生改變。不過有時我會改變W矩陣中對角線上的一個或兩個元素。在這種情況下,我需要再次進行SVD​​並重新計算H矩陣。這顯然很慢且耗時。

我的問題是:如果我知道W中發生了什麼變化,並沒有什麼改變X有一個更有效的方法來重新計算(T(X)W¯¯ X)^ - 1?

或者把不同的是有一個有效的分析方法發現B中給出,只有以W對角線元素可以通過已知量的變化?

回答

2

有這樣一個方法,在您計算逆是一個真正的逆,而不是一個廣義逆的情況下(所有的奇異值的即是0)。但是,建議使用此操作時要小心。如果你以無限精確的方式做你的總和,一切都會好起來的。有限的精度,特別是幾乎奇異的問題 - 如果某些奇異值非常大 - 這些公式可能會導致精度損失。

我打電話逆你存儲C.如果添加d(其可以是正或負)到第m的重量,然後將修飾的C-矩陣,C〜說,和改性H,H〜,可以計算這樣的:

(」表示轉置,並且e_m是行這是所有0的矢量,除了第m個時隙1)

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,B〜說,對於給定的Y,可以通過計算:

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

這些公式的推導很簡單,但乏味的矩陣代數。 matrix inversion lemma派上用場。

+1

這種方式能夠有效的伎倆。感謝您指出關於0奇異值問題的注意事項。 – Atlas