Scikit-learn:在 GridSearchCV 中评分
Scikit-learn: scoring in GridSearchCV
scikit-learn 的 GridSearchCV
似乎收集了其(内部)交叉验证折叠的分数,然后对所有折叠的分数进行平均。我想知道这背后的理由。乍一看,收集交叉验证折叠的预测,然后将所选评分指标应用于所有折叠的预测,似乎更灵活。
我偶然发现这个的原因是我在 cv=LeaveOneOut()
和 scoring='balanced_accuracy'
(scikit-learn v0.20.dev0) 的不平衡数据集上使用 GridSearchCV
。将平衡准确性(或召回率)等评分指标应用于每个遗漏的样本是没有意义的。相反,我想先收集所有预测,然后将我的评分指标一次应用于所有预测。还是推理有误?
更新: 我通过基于 GridSearchCV
创建自定义网格搜索 class 来解决它,不同之处在于首先从所有内部折叠中收集预测并且评分指标应用一次。
GridSearchCV
使用评分来决定在模型中设置哪些内部超参数。
如果你想估计"optimal"个超参数的性能,你需要做一个额外的交叉验证步骤。
见http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html
编辑以更接近于回答实际问题:
对我来说,如果你想使用 LeaveOneOut
和 balanced_accuracy
,收集每个折叠的预测然后对它们全部打分似乎是合理的。我想您需要制作自己的网格搜索器才能做到这一点。您可以为此使用 model_selection.ParameterGrid
和 model_selection.KFold
。
scikit-learn 的 GridSearchCV
似乎收集了其(内部)交叉验证折叠的分数,然后对所有折叠的分数进行平均。我想知道这背后的理由。乍一看,收集交叉验证折叠的预测,然后将所选评分指标应用于所有折叠的预测,似乎更灵活。
我偶然发现这个的原因是我在 cv=LeaveOneOut()
和 scoring='balanced_accuracy'
(scikit-learn v0.20.dev0) 的不平衡数据集上使用 GridSearchCV
。将平衡准确性(或召回率)等评分指标应用于每个遗漏的样本是没有意义的。相反,我想先收集所有预测,然后将我的评分指标一次应用于所有预测。还是推理有误?
更新: 我通过基于 GridSearchCV
创建自定义网格搜索 class 来解决它,不同之处在于首先从所有内部折叠中收集预测并且评分指标应用一次。
GridSearchCV
使用评分来决定在模型中设置哪些内部超参数。
如果你想估计"optimal"个超参数的性能,你需要做一个额外的交叉验证步骤。
见http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html
编辑以更接近于回答实际问题:
对我来说,如果你想使用 LeaveOneOut
和 balanced_accuracy
,收集每个折叠的预测然后对它们全部打分似乎是合理的。我想您需要制作自己的网格搜索器才能做到这一点。您可以为此使用 model_selection.ParameterGrid
和 model_selection.KFold
。