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

Posted

技术标签:

【中文标题】蛮力是使用 Python 进行多重回归的最佳选择吗?【英文标题】:Is brute force the best option for multiple regression using Python? 【发布时间】:2016-11-01 01:31:47 【问题描述】:

在线性模型中???? = ????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 分钟。我相信这种方法对于每个变量都有数千个观察值的数据集效率不高。你会建议什么方法?

谢谢。

【问题讨论】:

你的意思是最低的MSE吗?另外,这个问题是针对代码审查的,因为您的代码确实可以运行,并且您正在努力提高它的效率。请张贴在那里 (codereview.stackexchange.com/questions/tagged/python) 这也可能是stats.stackexchange.com的问题,因为这是一个与Python无关的常见问题。查找“预测器选择”或这篇***文章:en.wikipedia.org/wiki/Stepwise_regression 作为“解决方案”的一个示例。 EV。 Kounis,我正在寻找三个最能解释目标变化的变量。我会很感激你的 cmets/links 为什么 MSE 比 R-squared 更好。感谢您在 Code Review 中发布此问题的建议。我要在这里删除这个问题吗? StefanS,感谢您提供逐步回归的链接。 我认为你需要先找到你想使用的统计方法(除非你想继续使用蛮力),一旦你知道了,Python 实现可能(也可能不是)很简单网络搜索。第一部分很可能是更难解决的问题。 【参考方案1】:

穷举搜索将是最慢的方法

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

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

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

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

【讨论】:

以上是关于蛮力是使用 Python 进行多重回归的最佳选择吗?的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的多重回归(带因子选择)

lasso和cox结果矛盾

使用 R Shiny 进行多重线性回归 (SelectInput --> multiple=TRUE)

python买卖股票的最佳时机--贪心/蛮力算法简介

R语言使用MASS包的stepAIC函数构建逐步回归模型Stepwise Regression进行回归分析模型的最佳预测变量组合筛选向后逐步选择Backward stepwise selection

5.4 多重共线性人均网络消费回归分析——python实战