欠拟合训练和测试分数

时间:2021-02-12 14:28:37

标签: python scikit-learn training-data gridsearchcv overfitting-underfitting

我有两年范围内的每小时数据。我想在预测特定周的目标变量时测试我的模型。我正在执行以下操作:

  1. 将我的数据拆分为训练和测试。 (训练数据是我要预测的一周之前的所有数据) (测试数据是我要预测的一周)

  2. 我正在使用 GridSearchCV 通过交叉验证查找参数(它将训练数据拆分为带有 CV 的训练和验证数据的组合)。

  3. 获得最佳参数后,我使用训练数据(我想要预测的一周之前的所有数据)训练我的模型。

  4. 然后我终于预测了最后一周(X_test)

我得到了不错的结果,但如何检查是否存在过拟合?

在第 2 步之后,我绘制了来自 GridSearchCV 的 cv_results_['mean_train_score'] 和 cv_results_['mean_test_score'] 并得到以下结果: (图中的“测试”指的是交叉验证中的验证数据)

image

这是否表示过拟合?如果是这样,它是如何发生的,因为我的测试数据(我稍后预测的那一周)甚至没有包含在训练/交叉验证阶段,我该如何预防?

编辑: 我在这里显示的图是在预测测试周之前。该图是在 GridSearchCV 之后获得的。当我预测我的 X_test(看不见的一周)时,我得到了一个非常低的 MAPE 值,这非常好。这会丢弃过拟合吗?

在预测我的一周后,我得到了以下信息:

from slearn import metrics
print(metrics.r2_score(y_train,model.predict(X_train)))
print(metrics.r2_score(y_test,model.predict(X_test)))

0.997158194421393 #train
0.942592886385622 #test

这有什么意义吗?

1 个答案:

答案 0 :(得分:0)

<块引用>

这是否表明过拟合?

是的,您的模型似乎过度拟合。分数差距挺大的。您的训练分数看起来几乎完美,但验证分数并不那么完美

<块引用>

如果是,那么自从我的测试数据(我预测的那一周)以来它是如何发生的 后来)甚至不包括在训练/交叉验证阶段和 我该如何预防?

这可能是因为您的模型在测试数据中存在的特定数据组中表现良好。基本上,它不能很好地概括。如果一个模型很好地概括了给定的数据,那么 CV 结果和您的测试结果应该都很高。所以你得到高测试分数的原因,清楚地表明模型过度拟合只存在于测试数据中的那组数据。

虽然我不知道您的数据包含多少行/列,但过度拟合可能是因为数据不足或嘈杂。您仍然可以尝试正则化技术。