问题描述
我有一个关于超参数调整和寻找最佳拟合模型(为特定数据集寻找最佳拟合模型)的问题。我建议我应该将数据分成三组,而不是两组(仅用于训练和测试):
_培训
_验证
_测试
并在我的训练集上使用网格搜索(交叉验证),在网格搜索(交叉验证)之后,我可能会使用另一组“验证集”来测试我的模型的泛化能力(在看不见的数据上的性能),我可能之后更改一些参数。但是,我不知道如何使用验证集来测试我的模型的泛化能力。
我的代码:
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 个折叠外数据集,这些数据集基本上用于在未见数据上使用选定参数评估模型的泛化能力。
如果您的意思是需要使用另一个数据集并根据模型验证模型,我个人会遵循以下两个选项之一:
- 获得具有最低错误率的最佳模型:通过选择 model=gd_sr_dt.base_estimator_,然后测试验证数据集 preds=model.predict(X_val)。
- 对表现出最佳性能的模型进行集合:这样,您将对每个折叠中生成的每个模型的预测求平均值。