使用scikit-learn进行超参数调整的代码如下所示:
gs = GridSearchCV(estimator=pipe_svc,
param_grid=param_grid,
scoring='accuracy',
cv=10,
n_jobs=-1)
gs = gs.fit(X_train, y_train)
clf = gs.best_estimator_
clf.fit(X_train, y_train)
对于超参数的每个组合,执行K折交叉验证,并且使用给出最佳分数的组合来训练整个训练数据以适合模型,并且该模型将用于在测试上进行预测(看不见的)数据。
我的问题是如何使用嵌套交叉验证执行相同的工作。 以下代码执行嵌套的5x2交叉验证
gs = GridSearchCV(estimator=pipe_svc,
param_grid=param_grid,
scoring='accuracy',
cv=2)
scores = cross_val_score(gs, X_train, y_train,
scoring='accuracy', cv=5)
其中GridSearchCV运行内部循环,而cross_val_score()运行外部循环。由于给了cross_val_score()cv = 5,结果将是五个不同的模型(即超参数)
如果模型足够稳定,那么所有得到的超参数可能相同。但如果没有,人们应该自然地选择与cross_val_score()
返回的得分数组中最高的超参数相对应的超参数。我想知道如何访问它,以便我可以使用它再次使用整个训练数据拟合模型,最后预测测试数据集。