使用验证集测试模型的泛化能力

Using validation set for testing the generalization power of model

我有一个关于超参数调整和寻找最佳拟合模型(寻找特定数据集的最佳拟合模型)的问题。有人建议我将数据分成三组,而不是两组(仅限训练和测试):

_培训

_验证

_测试

并在我的训练集上使用网格搜索(交叉验证),在网格搜索(交叉验证)之后,我可能会使用另一组“验证集”来测试我的模型的泛化能力(在看不见的数据上的表现),之后我可能会更改一些参数。但是,我不知道如何使用验证集来测试我的模型的泛化能力。

我的代码:

dt = DecisionTreeClassifier(random_state=12)
max_depth = [int(d) for d in np.linspace(1,20,20)]
max_features = ['log2', 'sqrt','auto']
criterion = ['gini', 'entropy']
min_samples_split = [2, 3, 50, 100]
min_samples_leaf = [1, 5, 8, 10]
grid_param_dt = dict(max_depth=max_depth, max_features=max_features, min_samples_split=min_samples_split, min_samples_leaf=min_samples_leaf, criterion=criterion)
gd_sr_dt = GridSearchCV(estimator=dt, param_grid=grid_param_dt, scoring='accuracy', cv=10)

gd_sr_dt.fit(x_train, y_train)
best_parameters_dt = gd_sr_dt.best_params_
print(best_parameters_dt)

我得到如下超参数调整:

{'criterion': 'gini', 'max_depth': 9, 'max_features': 'log2', 'min_samples_leaf': 10, 'min_samples_split': 50}

如何使用验证集来测试具有这些超参数的模型的泛化能力?

这个问题还不是很清楚。但是,如果您的意思是您需要有一个验证数据集,那么您已经在这样做了。对于可能参数的每种组合,您将创建 10 个折叠(通过 GridSearchCV),这意味着 10 个折叠外数据集,这些数据集基本上用于使用选定参数对未见数据评估模型的泛化能力。

如果您的意思是您需要另一个数据集并根据其验证模型,我个人会遵循以下两个选项之一:

  • 获得错误率最低的最佳模型:通过选择模型=gd_sr_dt.base_estimator_,然后测试验证数据集preds=model.predict(X_val).
  • 采用表现最佳的模型的集合:这样,您将取每个折叠中生成的每个模型的预测的平均值。