2012-07-10 225 views
1

如果這個答案已經在我無法找到的地方回答,請隨時向論壇打我一巴掌。用Numpy最小二乘迴歸矩陣

我在計算N-1矩陣中N×M矩陣和一組已知的地面實況解的最小二乘線性迴歸。從那裏,我想獲得每個迴歸的斜率,截距和殘值。基本思想是,我知道應該爲每行中的N個樣本預測它的實際值,並且我想使用殘差確定M列中的哪組預測值是最準確的。

我沒有描述矩陣好,所以這裏有一個圖紙:

(N,M) matrix with predicted values for each row N 
in each column of M... 

##NOTE: Values of M and N are not actually 4 and 3, just examples 
    4 columns in "M" 
    [1, 1.1, 0.8, 1.3] 
    [2, 1.9, 2.2, 1.7] 3 rows in "N" 
    [3, 3.1, 2.8, 3.3] 


(1,N) matrix with actual values of N 


    [1] 
    [2] Actual value of each sample N, in a single column 
    [3] 

如此反覆,爲了清楚起見,我在找計算(N,M)中的每一列之間的lstsq迴歸矩陣和(1,N)矩陣。

例如,

之間
[1] and [1] 
[2]  [2] 
[3]  [3] 

然後迴歸

之間
[1] and [1.1] 
[2]  [1.9] 
[3]  [3.1] 

等,輸出的斜率,截距和標準對計算出的各回歸誤差(平均殘差)迴歸。

到目前爲止,在numpy/scipy文檔和'網絡中,我只找到一次計算一列的例子。我原以爲numpy的還必須計算在一組每列迴歸與標準

np.linalg.lstsq(arrayA,arrayB) 

的能力,但返回錯誤

ValueError: array dimensions must agree except for d_0 

我需要的列拆分爲自己的陣列,然後一次計算一個? 有沒有一個參數或矩陣操作,我需要使用numpy計算每列獨立的迴歸?

我覺得應該更簡單嗎?我把它看了一遍,我似乎無法找到任何人做類似的事情。

+0

你說你的矩陣是(N,M) (1,N)。 Lstsq期望(N,M)和(N),你是否嘗試使用arrayB的轉置?雖然(LinAlgError:不兼容的維),我得到了一個稍微不同的例外,我使用Python2.7,與numpy1.6 – Dhara 2012-07-10 17:35:04

回答

1

也許你換了A和B?

我以下工作:

A=np.random.rand(4)+np.arange(3)[:,None] 
# A is now a (3,4) array 
b=np.arange(3) 
np.linalg.lstsq(A,b) 
0

arrayB的0號尺寸必須一樣arrayA的0號尺寸(參考:的np.linalg.lstsq官方文檔)。您需要尺寸爲(N, M) and (N, 1)(N, M) and (N)的矩陣,而不是您現在使用的(N,M) and (1,N)矩陣。

請注意,(N, 1)N維矩陣將給出相同的結果 - 但陣列的形狀將不同。

我得到一個稍微不同的異常由你,但可能是由於不同的版本(我使用Python 2.7,numpy的1.6在Windows上):

>>> A = np.arange(12).reshape(3, 4) 
>>> b = np.arange(3).reshape(1, 3) 

>>> np.linalg.lstsq(A,b) 
# This gives "LinAlgError: Incompatible dimensions" exception 

>>> np.linalg.lstsq(A,b.T) 
# This works, note that I am using the transpose of b here