80-20还是80-10-10用于训练机器学习模型?

我有一个非常基础的问题。

1) 在什么情况下建议保留一部分数据用于验证,什么情况下不需要这样做?例如,什么时候我们可以说最好采用80%用于训练,10%用于验证,10%用于测试的划分方式,什么时候可以说简单地采用80%用于训练,20%用于测试的划分方式就足够了?

2) 此外,使用K折交叉验证是否与简单划分(训练-测试)兼容?


回答:

如果我的数据集规模有限,我认为拥有训练集和验证集更为有价值。验证集本质上也是一个测试集。这样做的原因是,你希望你的模型能够从在训练数据上获得高准确率的基础上,对未见过的数据也具有高准确率。验证集可以帮助你确定这一点。我通常会至少拿出10%的数据集作为验证集。重要的是,你要随机选择验证数据,使其概率分布与训练集匹配。接下来,我会监控验证损失,并保存验证损失最低时的模型。我还使用可调整的学习率。Keras有两个有用的回调函数可用于此目的,分别是ModelCheckpoint和ReduceLROnPlateau。文档在这里这里。有了验证集,你可以在训练过程中监控验证损失,并确定你的模型是否在正确训练(训练准确率)以及是否正确地进行外推(验证损失)。通常情况下,随着模型准确率的提高,验证损失平均应会减少。如果验证损失开始增加而训练准确率很高,那么你的模型可能出现了过拟合,你可以采取补救措施,例如加入丢弃层(dropout layers)、使用正则化器(regularizers)或降低模型复杂度。相关文档在这里这里这里。关于为什么我使用可调整学习率,可以参考Stack Overflow上的一个回答这里

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注