3

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

数据集由 100 个自变量和 1 个因变量组成。每个变量有 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 分钟。我相信这种方法对于每个变量都有数千个观察值的数据集效率不高。你会建议什么方法?

谢谢你。

4

1 回答 1

1

详尽的搜索将是最慢的方法

其中一条评论提到了最快的方法。您应该根据理论/直觉/逻辑预先指定您的模型,并提出一组您假设的变量,这些变量可以很好地预测您的结果。

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

但是,如果您不想指定模型并且仍想使用自动化技术来构建“最佳”模型,则中间立场可能类似于逐步回归

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

于 2016-07-20T09:47:26.827 回答