我正在使用sklearn包中的LogisticRegression,并对分类有一个快速的问题。我为分类器建立了ROC曲线,结果证明训练数据的最佳阈值约为0.25。我假设创建预测时的默认阈值为0.5。进行10倍交叉验证时,如何更改此默认设置以找出模型的精度?基本上,我希望我的模型为大于0.25(而不是0.5)的任何人预测“1”。我一直在浏览所有文档,但似乎一无所获。

最佳答案

这不是内置功能。您可以通过将LogisticRegression类包装在自己的类中并添加在自定义threshold方法中使用的predict()属性来“添加”它。

但是,请注意以下几点:

  • 默认阈值实际上是0。LogisticRegression.decision_function()返回到所选分隔超平面的有符号距离。如果您正在查看predict_proba(),那么您正在查看阈值为0.5的超平面距离的logit()。但这计算起来更昂贵。
  • 通过选择这样的“最佳”阈值,您正在利用信息后学习,这会破坏您的测试集(即,您的测试或验证集不再提供无偏估计的样本外误差)。因此,除非您仅在训练集上的交叉验证循环内选择阈值,然后将其和训练过的分类器与测试集一起使用,否则可能会导致其他过度拟合。
  • 如果您遇到不平衡的问题,请考虑使用class_weight,而不是手动设置阈值。这将迫使分类器选择远离严重关注类别的超平面。
  • 关于python - sklearn LogisticRegression并更改分类的默认阈值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31417487/

    10-12 23:45