2017-08-03 24 views
-1

的平方殘差之和我正在使用sklearn.linear_model.LinearRegression並希望計算我的係數的標準誤差。據我所知,sklearn不包含這樣做的函數,所以我需要手動計算它們(有關線性迴歸係數估計的標準誤差示例,請參閱https://en.wikipedia.org/wiki/Ordinary_least_squares)。sklearn.linear_model.LinearRegression

我使用我的線性迴歸的殘差_屬性來得到平方殘差的總和。我的問題是關於http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html的文檔,它將_residues定義爲:

residues_:array,shape(n_targets,)或(1,)或空。 總和 殘差。在 期間通過的每個目標的平方歐幾里德2-範數。如果線性迴歸問題未被確定(訓練矩陣的線性無關行數 小於其線性無關列的數目 ),則這是一個空數組。如果 在擬合過程中傳遞的目標矢量是1維的,這是一個 (1,)形狀數組。

「殘差總和」是否是文檔中的錯誤?我認爲它應該說「殘差平方和」。 (如果線性迴歸包括一個常數,則訓練數據上的殘差總和爲零:參見https://stats.stackexchange.com/questions/194523/why-does-the-sum-of-residuals-equal-0-from-a-graphical-perspective。另外,文檔中的以下句子表示「平方歐幾里德2-範數」,它是平方和。 )如果文檔確實是錯誤的,我該如何糾正?

編輯:

import numpy as np 
from sklearn import linear_model 

n_obs = 5 
X = np.ones((n_obs, 1), dtype=float) 
X[3] = 7.0 
y = np.ones((n_obs,)) 
y[1] = 10.0 
y[3] = 9.0 
model = linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1) 

np.isclose(np.sum(np.power(y - model.predict(X=X), 2)), model.residues_) # True 
+1

如果你認爲這是一個錯誤,你可以將它發佈在他們的[github問題頁面](https://github.com/scikit-learn/scikit-learn/issues)上。如果你是對的,那麼他們會糾正這個錯誤,如果你不是這樣,你仍然可以獲得關於爲什麼這樣寫(或執行)的信息。 –

+0

@VivekKumar感謝您的鏈接,我會這樣做。 – Adrian

+0

發表於https://github.com/scikit-learn/scikit-learn/issues/9491 – Adrian

回答

0

將殘餘物直接從scipy.linalg.lstsq採取::

殘基:我可以用一個簡單的例子確認我的懷疑()或(1)或( K,)ndarray 殘差的和,b-a x中每列的平方2-範數。如果矩陣a的秩爲< N或> M,或者使用'gelsy',則這是一個空陣列。如果b是一維的,這是一個(1,)形陣列,否則形狀是(K,)。

所以你似乎是對的。

也就是說,self.residues_自#5452(2015年10月合併)已被棄用,並將在v0.19(即將發佈)中刪除。 正如你在你的代碼片段中所顯示的那樣,你可以輕鬆地計算出它們。