对训练或验证分区执行交叉验证以优化参数



我有一个大型数据集,它被划分为三个 chucks(train-validate-test(。我想执行交叉验证(CV(,因为我有一个大型数据集,因此对整个数据集执行CV需要很长时间。执行 CV 的正确分区是什么?我见过仅使用训练拆分的教程,而其他教程仅使用验证拆分,而其他教程则使用整个数据集。

感谢您的任何澄清或帮助。

为了简化事情,假设你只有一个超参数。如果要执行交叉验证,可以选择N不同的超参数值,并在训练集上训练N不同的模型。然后,您将选择在验证集上具有最佳性能的超参数。然后,您将使用所选超参数使用训练集和验证集重新训练模型。然后在测试集上评估模型性能。

如果数据集很大,则可以选择一个小子集,找到最佳超参数并继续增加子集,直到可以推断出完整数据集大小下的最佳超参数。在实践中,您通常可以选择尽可能大的子集,您可能会感到烦恼,并且只为该子集使用最佳超参数。

编辑:

如果您使用 scikit-learn,下面是带有超参数C的假设model的伪代码:

from sklearn.model_selection import GridSearchCV
# X_train, X_test are the train and test features
# Y_train, Y_test are the corresponding labels/values to predict.
# model is some scikit-learn regression or classification model
# Create a parameter grid
param_grid = {'C': [0.1, 1, 5, 15, 100]}
# Do two fold CV. You can do other types of CV as well by passing
# a cross-validation generator
estimator = GridSearchCV(model, cv=2, param_grid=param_grid)
# Do the cross validation procedure explained below
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)

相关内容

  • 没有找到相关文章

最新更新