在训练或验证分区上执行交叉验证以调整参数

我有一个大型数据集,分成了三个部分(训练-验证-测试)。我想进行交叉验证(CV),由于数据集很大,在整个数据集上进行CV会花费很长时间。应该在哪个分区上进行CV呢?我看到一些教程只使用训练集,另一些只使用验证集,还有一些使用整个数据集。

感谢任何澄清或帮助。


回答:

为了简化问题,我们假设你只有一个超参数。如果你想进行交叉验证,你会选择N个不同的超参数值,并在训练集上训练N个不同的模型。然后,你会在验证集上选择表现最佳的超参数。接着,你会使用选定的超参数,在训练集和验证集上重新训练模型。然后在测试集上评估模型的表现。

如果你的数据集非常大,你可以选择一个小子集,找到最优的超参数,并继续增加子集大小,直到你能推断出在完整数据集大小下的最优超参数。在实践中,你通常可以选择尽可能大的子集,并使用该子集的最优超参数。

编辑:

如果你使用scikit-learn,以下是一个假设的model和超参数C的伪代码:

from sklearn.model_selection import GridSearchCV# X_train, X_test是训练和测试特征# Y_train, Y_test是相应的标签/值需要预测的。# model是某个scikit-learn回归或分类模型# 创建参数网格param_grid = {'C': [0.1, 1, 5, 15, 100]}# 执行二折CV。你可以通过传递# 一个交叉验证生成器来执行其他类型的CVestimator = GridSearchCV(model, cv=2, param_grid=param_grid)# 执行下面的交叉验证过程estimator.fit(X_train, Y_train)

当你运行fit方法时,会将你的训练集(X_train, Y_train)分为两部分。然后,你使用数据的前半部分训练模型,设置C=0.1,并在后半部分评估性能。在这种情况下,前半部分是训练集,后半部分是验证集。之后,你重复这个过程,但使用后半部分作为训练集,前半部分作为验证集。然后,性能会被平均并存储起来。

然后,你对C的剩余值重复这个过程。然后,你检查哪个C值能提供最佳的预测准确率。该值随后被用来在整个训练集(X_train, Y_train)上训练最终模型。模型的性能可以通过以下方式在留出的测试集上评估:

score = estimator.score(X_test, Y_test)

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

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