我想線性擬合未被獨立採樣的數據。我遇到了廣義最小二乘法:大數據集上的廣義最小二乘法
b=(X'*V^(-1)*X)^(-1)*X'*V^(-1)*Y
該公式爲Matlab格式; X
和Y
是數據點的座標,並且V
是「方差矩陣」。
問題是,由於其大小(1000行和列),V矩陣變得奇異,因此不可逆。有關如何解決此問題的任何建議?也許使用一種解決GLS以外的廣義線性迴歸問題的方法?我可以使用的和稍微熟悉的工具是Numpy/Scipy,R和Matlab。
我想線性擬合未被獨立採樣的數據。我遇到了廣義最小二乘法:大數據集上的廣義最小二乘法
b=(X'*V^(-1)*X)^(-1)*X'*V^(-1)*Y
該公式爲Matlab格式; X
和Y
是數據點的座標,並且V
是「方差矩陣」。
問題是,由於其大小(1000行和列),V矩陣變得奇異,因此不可逆。有關如何解決此問題的任何建議?也許使用一種解決GLS以外的廣義線性迴歸問題的方法?我可以使用的和稍微熟悉的工具是Numpy/Scipy,R和Matlab。
您可以使用奇異值分解作爲求解器。它會盡力做到最好。
我通常會以另一種方式思考最小平方。你可以在這裏閱讀我的想法:
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
相反的:
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 ];
它崩潰過,遺憾的是:「警告:矩陣是奇異的,以加工精度 警告:矩陣是奇異的,接近單數或嚴重縮放 結果可能。不準確RCOND = NaN 警告:矩陣對於工作精度來說是單數。「 – PeterC 2012-03-08 15:33:45