在线性模型中 y = a0 + a1 × xi + a2 × xj + a3 × xk + ε ,i,j,k ∈ [1,100] 的哪些值会导致具有最高 R 平方的模型?
数据集由 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 分钟才完成。我相信这种方法对于每个变量具有数千个观测值的数据集无效。你会建议什么方法?
谢谢。
穷举搜索将是执行此操作的最慢方法
其中一条评论中提到了最快的方法。您应该根据理论/直觉/逻辑预先指定您的模型,并提出一组您假设的变量,这些变量将成为结果的良好预测指标。
这两个极端之间的区别在于,穷举搜索可能会给你留下一个没有意义的模型,因为它会使用它可以访问的任何变量,即使它与你感兴趣的问题完全无关。
但是,如果您不想指定模型,但仍想使用自动化技术来构建"最佳"模型,则中间立场可能是逐步回归。
有几种不同的方法可以做到这一点(例如,向前/向后消除(,但是在前向选择的情况下,例如,您首先一次添加一个变量并测试系数的显著性。如果变量提高了模型拟合度(通过单个回归系数或模型的 R2 确定(,则保留它并添加另一个变量。如果它不能帮助预测,那么你就把它扔掉。重复此过程,直到找到最佳预测因子