2012-03-08 95 views
1

我想線性擬合未被獨立採樣的數據。我遇到了廣義最小二乘法:大數據集上的廣義最小二乘法

b=(X'*V^(-1)*X)^(-1)*X'*V^(-1)*Y 

該公式爲Matlab格式; XY是數據點的座標,並且V是「方差矩陣」。

問題是,由於其大小(1000行和列),V矩陣變得奇異,因此不可逆。有關如何解決此問題的任何建議?也許使用一種解決GLS以外的廣義線性迴歸問題的方法?我可以使用的和稍微熟悉的工具是Numpy/Scipy,R和Matlab。

回答

1

您可以使用奇異值分解作爲求解器。它會盡力做到最好。

我通常會以另一種方式思考最小平方。你可以在這裏閱讀我的想法:

http://www.scribd.com/doc/21983425/Least-Squares-Fit

看看是否能爲你工作好。

我不明白如何大小是一個問題。如果你有N個(x, y)對你還是隻需要解決一個M階多項式(M + 1)的係數:

y = a0 + a1*x + a2*x^2 + ... + am*x^m 
2

相反的:

b=(X'*V^(-1)*X)^(-1)*X'*V^(-1)*Y 

使用

b= (X'/V *X)\X'/V*Y 

也就是說,將X*(Y^-1)的所有實例替換爲X/Y。 Matlab將會跳過計算逆(這很難且容易出錯)並直接計算除法。


編輯:即使有最好的矩陣操作,一些操作是不可能的(例如導致像你描述的錯誤)。

可能與您的問題相關的一個例子是,如果嘗試解決約束條件下的最小二乘問題,則多個測量值完全相關,即100%相關。除了在罕見的退化情況下,無論是在數學上還是在身體上都無法完成。測量中需要一些獨立性來解決測量噪聲或建模錯誤。舉例來說,如果你有兩個測量,每個爲1的變化,並完全相關的,那麼你的V矩陣是這樣的:

V = [1 1; ... 
    1 1]; 

而你也永遠無法擬合數據。 (這通常意味着您需要重新制定基本功能,但這是一篇較長的文章。)

但是,如果您調整測量方差以允許測量之間存在少量獨立性,那麼它可以毫無問題地工作。例如,95%的相關測量是這樣

V = [1  0.95; ... 
    0.95 1 ]; 
+0

它崩潰過,遺憾的是:「警告:矩陣是奇異的,以加工精度 警告:矩陣是奇異的,接近單數或嚴重縮放 結果可能。不準確RCOND = NaN 警告:矩陣對於工作精度來說是單數。「 – PeterC 2012-03-08 15:33:45