为简化起见,我们假设您只有一个超参数。如果你想做交叉验证,你会选择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)