2

在線性模型= 0 + 1×i + 2×j + 3×k +, 中,j,k∈[1,100]的結果是R模型的最高值?蠻力是使用Python進行多元迴歸的最佳選擇嗎?

該數據集由100個獨立變量和一個因變量組成。每個變量有50個觀測值。

我唯一的猜測是循環所有可能的三個變量的組合,並比較每個組合的R平方。我用Python完成的方式是:

import itertools as itr 
import pandas as pd 
import time as t 
from sklearn import linear_model as lm 

start = t.time() 

#linear regression model 
LR = lm.LinearRegression() 

#import data 
data = pd.read_csv('csv_file') 

#all possible combinations of three variables 
combs = [comb for comb in itr.combinations(range(1, 101), 3)] 

target = data.iloc[:,0] 
hi_R2 = 0 

for comb in combs: 
    variables = data.iloc[:, comb] 
    R2 = LR.fit(variables, target).score(variables, target) 
    if R2 > hi_R2: 
     hi_R2 = R2 
     indices = comb 
end = t.time() 
time = float((end-start)/60) 

print 'Variables: {}\nR2 = {:.2f}\nTime: {:.1f} mins'.format(indices, hi_R2, time) 

花了4.3分鐘完成。我認爲這種方法對於每個變量具有數千個觀察值的數據集是無效的。你會建議什麼方法?

謝謝。

+0

你的意思是最低的MSE?再加上這個問題是Code Review的問題,因爲你的代碼確實運行了,而且你正在努力提高它的效率。請將它發佈在那裏(http://codereview.stackexchange.com/questions/tagged/python) –

+0

它也可能是http://stats.stackexchange.com的問題,因爲它是一個與Python無關的常見問題。尋找「預測選擇」或這個維基百科文章:https://en.wikipedia.org/wiki/Stepwise_regression作爲一個「解決方案」的例子。 – StefanS

+0

Ev。 Kounis,我正在尋找三個最能解釋目標變化的變量。爲了達到這個目的,我希望MSE爲什麼比R-squared更好。感謝您在Code Review中發佈此問題的建議。我應該在這裏刪除這個問題嗎? StefanS,謝謝你的鏈接到逐步迴歸。 – antdro

回答

0

窮舉搜索將是這樣做

要做到這一點,最快的方式在一個評論中提到的最慢的方式。您應該根據理論/直覺/邏輯預先指定您的模型,並提出一套您假設的變量是預測結果的良好預測指標。

2個極端之間的區別是,窮舉搜索會給你留下一個模型,是沒有意義的,因爲它會使用任何變量,它具有訪問,即使它完全無關,您感興趣的問題

但是,如果你不想指定一個模型,並仍想使用自動化技術打造的「最好」的模式,一箇中間地帶可能是這樣的stepwise regression

這樣做有幾個不同的方式(例如向前/向後消除),但是在向前選擇的情況下,例如,您可以通過一次添加一個變量並測試係數以確定NCE。如果變量改善模型擬合(或者通過個體迴歸係數或模型的R2確定),則保留它並添加另一個。如果它不幫助預測,那麼你就把它扔掉。重複這個過程,直到找到最好的預測變量