【发布时间】: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 实现可能(也可能不是)很简单网络搜索。第一部分很可能是更难解决的问题。
标签: python statistics scikit-learn regression multiple-regression