GridSearchCV的refit和scorer的结合不清楚
Combination of GridSearchCV's refit and scorer unclear
我使用 GridSearchCV
在我的嵌套交叉验证的内部循环中找到最佳参数。 'inner winner' 是使用 GridSearchCV(scorer='balanced_accuracy'
) 找到的,因此据我了解文档,内部折叠平均具有最高平衡精度的模型是 'best_estimator'。我不明白 GridSearchCV
中 refit
的不同论点与 scorer
论点结合起来有什么作用。如果 refit
为 True,当重新拟合到数据集时,将使用什么评分函数来估计 'inner winner' 的性能?传递给 scorer
的相同评分函数(所以在我的例子中是 'balanced_accuracy')?为什么还可以将字符串传递给 refit
?这是否意味着您可以对 1.) 找到 'inner winner' 和 2.) 使用不同的函数来估计 'inner winner' 在整个数据集上的性能?
当refit=True
时,sklearn使用整个训练集来重新拟合模型。因此,没有留下任何测试数据来估计使用任何 scorer
函数的性能。
如果您在 GridSearchCV 中使用多个 scorer
,可能 f1_score
或 precision
以及您的 balanced_accuracy
,sklearn 需要知道其中的哪一个 scorer
用于查找您所说的 "inner winner"。例如,KNN
、f1_score
可能在 K=5
时效果最好,但 accuracy
可能在 K=10
时效果最好。 sklearn 无法知道哪个超参数值 K
是最好的。
为了解决这个问题,您可以将一个字符串 scorer
传递给 refit
以指定 scorer
中的哪一个最终应该决定最佳超参数。然后,这个最佳值将用于使用完整数据集重新训练或重新拟合模型。所以,当你只有一个 scorer
,就像你的情况一样,你不必担心这个。只需 refit=True
就足够了。
我使用 GridSearchCV
在我的嵌套交叉验证的内部循环中找到最佳参数。 'inner winner' 是使用 GridSearchCV(scorer='balanced_accuracy'
) 找到的,因此据我了解文档,内部折叠平均具有最高平衡精度的模型是 'best_estimator'。我不明白 GridSearchCV
中 refit
的不同论点与 scorer
论点结合起来有什么作用。如果 refit
为 True,当重新拟合到数据集时,将使用什么评分函数来估计 'inner winner' 的性能?传递给 scorer
的相同评分函数(所以在我的例子中是 'balanced_accuracy')?为什么还可以将字符串传递给 refit
?这是否意味着您可以对 1.) 找到 'inner winner' 和 2.) 使用不同的函数来估计 'inner winner' 在整个数据集上的性能?
当refit=True
时,sklearn使用整个训练集来重新拟合模型。因此,没有留下任何测试数据来估计使用任何 scorer
函数的性能。
如果您在 GridSearchCV 中使用多个 scorer
,可能 f1_score
或 precision
以及您的 balanced_accuracy
,sklearn 需要知道其中的哪一个 scorer
用于查找您所说的 "inner winner"。例如,KNN
、f1_score
可能在 K=5
时效果最好,但 accuracy
可能在 K=10
时效果最好。 sklearn 无法知道哪个超参数值 K
是最好的。
为了解决这个问题,您可以将一个字符串 scorer
传递给 refit
以指定 scorer
中的哪一个最终应该决定最佳超参数。然后,这个最佳值将用于使用完整数据集重新训练或重新拟合模型。所以,当你只有一个 scorer
,就像你的情况一样,你不必担心这个。只需 refit=True
就足够了。