在线性模型中= 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分钟。我相信这种方法对于每个变量有数千个观测数据的数据集效率不高。你会建议用什么方法?
谢谢。
答案 0 :(得分:1)
穷举搜索将是最慢的方式
其中一条评论中提到了执行此操作的最快方法。您应该根据理论/直觉/逻辑预先指定您的模型,并提出一组变量,您假设这些变量将成为您预测结果的良好预测因素。
两个极端之间的区别在于穷举搜索可能会给你一个没有意义的模型,因为它会使用它可以访问的任何变量,即使它与你感兴趣的问题完全无关
但是,如果你不想指定一个模型,并且仍然希望使用自动化技术来构建"最好的"模型,中间地带可能类似于stepwise regression
有几种不同的方法可以做到这一点(例如向前/向后消除),但在前向选择的情况下,例如,您首先添加一个变量并测试系数的显着性。如果变量改进模型拟合(通过单个回归系数或模型的R2确定),则保留它并添加另一个。如果它没有帮助预测,那么你扔掉它。重复此过程,直到找到最佳预测变量