【发布时间】:2017-10-10 21:54:43
【问题描述】:
目标:我想计算拟合多元线性回归模型所做预测的检验误差。
问题:这是我的代码。它旨在将线性回归模型拟合到训练数据,然后根据 X_test 变量预测 y 值(价格):
X.insert(0, 'constant', 1) # insert constant column
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
lm_sm = sm.OLS(y_train, X_train).fit()
y_pred = pd.DataFrame() # dataframe for predictions vs actual y-values
y_pred['predictions'] = lm_sm.predict(X_test)
print y_test.sort_index().head()
print y_pred.sort_index().head()
代码输出如下:
price
6 257500.0
17 485000.0
23 252700.0
25 233000.0
26 937000.0
predictions
0 509428.615367
1 324403.584917
2 477385.431339
3 484962.235105
4 827039.820936
比较预测和实际价格,这显然是不对的。 predict() 方法不保留我的训练/测试拆分中的索引。因此,当我将预测价格与实际价格进行比较时,我无法确定我比较的是正确的值。
我想到的唯一解决方案(我不确定这是否正确)是在进行预测时对 X_test 进行排序,即y_pred['predictions'] = lm_sm.predict(X_test.sort_index())。预测看起来更符合我的预期(注意这是第一个线性回归/基准测试,因此尚未应用特征工程):
price
6 257500.0
12 310000.0
18 189000.0
25 233000.0
29 719000.0
predictions
0 259985.788272
1 590648.478023
2 339621.126287
3 316402.199424
4 635513.611634
然后,我将根据这些排序的数据帧执行测试错误计算。这是正确的吗?有没有更清洁的方法来做到这一点?一个我不知道的方法?任何帮助/想法将不胜感激,谢谢!
【问题讨论】:
标签: python-2.7 pandas statsmodels