如何使用交叉验证使用培训,验证和测试集确定最终模型

时间:2020-07-29 06:08:24

标签: r machine-learning cross-validation

我难以理解哪些数据集:训练,验证和测试需要用于模型选择阶段而不是最终模型测试阶段。在底部发布可复制的代码时,我尝试在下面详细解释。谢谢您提出的所有建议/建议!

假设我们使用Kaggle上可用的开放"Life Expectancy (WHO)"数据集在要素 Life expectancy 上创建预测,同时使用RMSE作为我们的误差度量。 (我在这里问的是CV背后的概念,而不是最低的RMSE)。我们首先从原始数据集中划分训练集和测试集led_trainled_test led

接下来,我们创建一个线性模型,其中y = {Life expectancy和x = {GDP,数据= led_train,然后对随机森林模型和knn模型进行相同的处理,使用Caret进行重复交叉验证包。然后,我们使用新创建的模型和led_test进行预测。可以使用真实评级与预测评级的函数来计算RMSE。

我现在在测试集上具有线性模型的RMSE = 9.81141,随机森林= 9.828415,kNN = 8.923281。基于这些值,我显然会选择kNN模型作为我的“最终模型”,但是我不确定如何在新的“看不见的”数据上对其进行测试,以查看其实际效果如何。

我是否需要将“ led”分为3组(训练,验证和测试),然后在模型选择阶段使用验证,将测试保存在“最终模型”中?另外,如果我选择kNN模型,我是否可以将训练函数= led_train中的数据更改为led,以便在所有数据上运行它,然后使用{{1}进行预测?在最终模型中,我是否会再次设置trControl并运行交叉验证,还是不再需要这样做,因为这是对训练数据进行的?请在下面找到我的可复制代码(您必须根据wd阅读.csv),并再次感谢您的关注!

*为了可重复性,种子设置为123,我正在运行R 3.63。

led_test

1 个答案:

答案 0 :(得分:0)

我的方法如下。最终模型应使用所有数据。我不确定最终将不包含所有数据的动机是什么。您只是放弃了预测能力。

对于交叉验证,只需将数据分为训练和测试数据即可。然后为整个模型选择性能最佳的建模方法,然后创建完整的模型。

当前代码的更大问题是,交叉验证方法可能会导致两件事:虚假准确性和潜在的虚假模型比较。您需要在交叉验证中处理时间自相关。例如,如果我的训练数据集具有2014年和2016年英国的特征,则您希望像随机森林这样的东西能够高精度地预测2015年的预期寿命。这可能就是您使用当前类型的交叉验证所要衡量的全部。最好创建一个分离的数据集,以使接受培训和测试的国家不同,或将其划分为明显不同的时间段。确切的方法将取决于您希望模型预测什么