蛮力是使用Python进行多元回归的最佳选择吗?

时间:2016-06-29 11:14:03

标签: python statistics scikit-learn regression multiple-regression

在线性模型中= 0 + 1×i + 2×j + 3×k +, 什么值,j,k∈[1,100]得到具有最高R-Squared的模型?

数据集由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分钟。我相信这种方法对于每个变量有数千个观测数据的数据集效率不高。你会建议用什么方法?

谢谢。

1 个答案:

答案 0 :(得分:1)

穷举搜索将是最慢的方式

其中一条评论中提到了执行此操作的最快方法。您应该根据理论/直觉/逻辑预先指定您的模型,并提出一组变量,您假设这些变量将成为您预测结果的良好预测因素。

两个极端之间的区别在于穷举搜索可能会给你一个没有意义的模型,因为它会使用它可以访问的任何变量,即使它与你感兴趣的问题完全无关

但是,如果你不想指定一个模型,并且仍然希望使用自动化技术来构建"最好的"模型,中间地带可能类似于stepwise regression

有几种不同的方法可以做到这一点(例如向前/向后消除),但在前向选择的情况下,例如,您首先添加一个变量并测试系数的显着性。如果变量改进模型拟合(通过单个回归系数或模型的R2确定),则保留它并添加另一个。如果它没有帮助预测,那么你扔掉它。重复此过程,直到找到最佳预测变量