2017-09-27 61 views
0

我試圖應用線性迴歸方法用於樣品9與使用python約50特徵的數據集。我曾嘗試不同的方法進行線性迴歸即封閉形式的OLS(普通最小二乘法),LR(線性迴歸),HR(胡貝爾迴歸),NNLS(非負最小二乘法)和他們每個人給出了不同的權重。線性迴歸VS閉合形式普通最小二乘在Python

但我可以得到直覺,爲什麼HR和NNLS有不同的解決方案,但LR和封閉形式的OLS具有相同的目標函數,用於最小化給定樣本中觀察值與由一組特徵的線性函數。由於訓練集是單數,我不得不使用僞逆來執行封閉形式的OLS。

w = np.dot(train_features.T, train_features) 
w1 = np.dot(np.linalg.pinv(w), np.dot(train_features.T,train_target)) 

對於LR我已經使用scikit學習線性迴歸使用LAPACK庫從www.netlib.org解決最小平方問題的線性方程組

 linear_model.LinearRegression() 

系統或多項式方程的系統被稱爲欠定如果沒有可用的方程式少於未知參數。每個未知參數可以被視爲可用的自由度。呈現的每個方程都可以作爲限制一個自由度的約束來應用。結果是一個欠定系統可能有無限多的解決方案或根本沒有解決方案。由於在我們的案例研究中,系統是不確定的,也是單一的,存在很多解決方案。

現在,這兩個僞逆和LAPACK庫嘗試找到一個欠定系統的最小范數解在沒有樣品的小於沒有的特徵。那麼爲什麼閉式和LR給出了完全不同的線性方程組的解決方案。我在這裏錯過了什麼可以解釋兩種方式的行爲。就像如果peudoinverse在像SVD,QR/LQ分解不同的方式來計算,可他們生產的同一組方程不同的解決方案?

回答

0

退房再次docs of sklearn's LinearRegression

默認情況下(比如你怎麼稱呼它),這也符合截距項!

演示:

import numpy as np 
from sklearn.datasets import load_boston 
from sklearn.linear_model import LinearRegression 

X, y = load_boston(return_X_y=True) 

""" OLS custom """ 
w = np.dot(np.linalg.pinv(X), y) 
print('custom') 
print(w) 

""" sklearn's LinearRegression (default) """ 
clf = LinearRegression() 
print('sklearn default') 
print(clf.fit(X, y).coef_) 


""" sklearn's LinearRegression (no intercept-fitting) """ 
print('sklearn fit_intercept=False') 
clf = LinearRegression(fit_intercept=False) 
print(clf.fit(X, y).coef_) 

輸出:

custom 
[ -9.16297843e-02 4.86751203e-02 -3.77930006e-03 2.85636751e+00 
    -2.88077933e+00 5.92521432e+00 -7.22447929e-03 -9.67995240e-01 
    1.70443393e-01 -9.38925373e-03 -3.92425680e-01 1.2e-02 
    -4.16972624e-01] 
sklearn default 
[ -1.07170557e-01 4.63952195e-02 2.08602395e-02 2.68856140e+00 
    -1.77957587e+01 3.80475246e+00 7.51061703e-04 -1.47575880e+00 
    3.05655038e-01 -1.23293463e-02 -9.53463555e-01 9.39251272e-03 
    -5.25466633e-01] 
sklearn fit_intercept=False 
[ -9.16297843e-02 4.86751203e-02 -3.77930006e-03 2.85636751e+00 
    -2.88077933e+00 5.92521432e+00 -7.22447929e-03 -9.67995240e-01 
    1.70443393e-01 -9.38925373e-03 -3.92425680e-01 1.2e-02 
    -4.16972624e-01] 
+0

非常感謝,我想在它的權重向量的是,普通方程也有一個$ W_o $或偏差值,這將是相同的值作爲線性迴歸中的截距值。我知道它是一個天真的問題,但是當一個人應該使用fit_intercept或不?對於兩種情況,權重是非常不同的,我試圖解釋係數。我從源頭上看到,係數是按比例縮放的,但目的是什麼? –

+0

攔截只是增加模型功能,通常是一個好主意。我不確定你的意思是縮放。標準化默認是關閉的,但標準化對於幾乎所有的ML算法來說都是最重要的事情之一,特別是線性迴歸。這是基本的ML-東西,每門課程都會解釋這一點。 – sascha