2024-04-24 14:07:09 发布
网友
似乎scikit learn的GridSearchCV收集了其(内部)交叉验证折叠的分数,然后将所有折叠的分数平均。我想知道这背后的理由。乍一看,似乎更灵活的做法是收集交叉验证折叠的预测,然后将选择的评分指标应用于所有折叠的预测。在
GridSearchCV
我偶然发现这一点的原因是我在一个不平衡的数据集上使用cv=LeaveOneOut()和{}(scikit learn v0.20.dev0)。对每个漏掉的样本应用平衡准确度(或召回率)这样的评分标准是没有意义的。相反,我希望首先收集所有预测,然后将我的评分指标应用于所有预测。或者这涉及到推理错误吗?在
cv=LeaveOneOut()
更新:我通过创建一个基于GridSearchCV的自定义网格搜索类来解决这个问题,不同之处在于首先从所有内部折叠中收集预测,然后应用一次评分指标。在
GridSearchCV使用评分来决定要在模型中设置哪些内部超参数。在
如果你想评估“最优”超参数的性能,你需要做一个额外的交叉验证步骤。在
见http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html
编辑以更接近于回答实际问题: 对我来说,如果你想使用LeaveOneOut和balanced_accuracy,那么收集每个折叠的预测值,然后对它们全部评分是合理的。我想你需要做你自己的网格搜索器来做到这一点。您可以使用model_selection.ParameterGrid和model_selection.KFold来实现这一点。在
LeaveOneOut
balanced_accuracy
model_selection.ParameterGrid
model_selection.KFold
GridSearchCV
使用评分来决定要在模型中设置哪些内部超参数。在如果你想评估“最优”超参数的性能,你需要做一个额外的交叉验证步骤。在
见http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html
编辑以更接近于回答实际问题: 对我来说,如果你想使用
LeaveOneOut
和balanced_accuracy
,那么收集每个折叠的预测值,然后对它们全部评分是合理的。我想你需要做你自己的网格搜索器来做到这一点。您可以使用model_selection.ParameterGrid
和model_selection.KFold
来实现这一点。在相关问题 更多 >
编程相关推荐