在线性模型中 𝑦 = 𝑎0 + 𝑎1 × 𝑥i + 𝑎2 × 𝑥j + 𝑎3 × 𝑥k + 𝜖 , 𝑖,j,k ∈ [1,100] 的什么值会导致具有最高 R 平方的模型?
数据集由 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 分钟。我相信这种方法对于每个变量都有数千个观测值的数据集来说效率不高。您建议改用哪种方法?
谢谢。
最佳答案
穷举搜索将是最慢的方法
其中一条评论中提到了最快的方法。您应该根据理论/直觉/逻辑预先指定您的模型,并提出一组您假设的变量,这些变量将很好地预测您的结果。
这两个极端之间的区别在于,穷举搜索可能会给您留下一个没有意义的模型,因为它将使用它可以访问的任何变量,即使它与您感兴趣的问题完全无关
但是,如果您不想指定模型并且仍想使用自动化技术来构建“最佳”模型,则中间立场可能类似于 stepwise regression。
有几种不同的方法可以做到这一点(例如向前/向后消除),但是在向前选择的情况下,例如,您首先一次添加一个变量并测试系数的显着性。如果变量改善了模型拟合(通过个体回归系数或模型的 R2 确定),则保留它并添加另一个。如果它对预测没有帮助,那么你就把它扔掉。重复此过程,直到找到最佳预测变量
关于python - 蛮力是使用 Python 进行多元回归的最佳选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38097941/