通过使用由模型生成的类成员资格概率的阈值来确定(二进制)逻辑回归的预测类。据我了解,默认情况下通常使用0.5。
但是改变阈值将改变预测的分类。这是否意味着阈值是超参数?如果是这样,为什么(例如)为什么无法使用scikit-learn的GridSearchCV
方法轻松地在阈值网格中进行搜索(就像对正则化参数所做的那样C
)。
通过使用由模型生成的类成员资格概率的阈值来确定(二进制)逻辑回归的预测类。据我了解,默认情况下通常使用0.5。
但是改变阈值将改变预测的分类。这是否意味着阈值是超参数?如果是这样,为什么(例如)为什么无法使用scikit-learn的GridSearchCV
方法轻松地在阈值网格中进行搜索(就像对正则化参数所做的那样C
)。
Answers:
决策阈值会在您预测的正数与预测的负数之间进行权衡-因为从重复性上讲,提高决策阈值将减少您预测的正数并增加所预测的负数你预测。
从模型调整的角度来看,决策阈值不是超参数,因为它不会改变模型的灵活性。
(例如,逻辑回归系数将有所不同),而调整阈值仅能做两件事:权衡TP用于FN和FP用于TN。但是,模型保持不变,因为这不会改变系数。(对于没有系数的模型,例如随机森林,也是如此:更改阈值不会改变树木的任何内容。)因此,从狭义上讲,您是正确的,即在错误之间找到最佳折衷方案是“调整”,但您认为将阈值更改以优化的方式链接到其他模型超参数是错误的GridSearchCV
。
换句话说,更改决策阈值反映了您所要选择的假阳性和假阴性的选择。考虑以下假设,您将决策阈值设置为一个完全不可信的值,如-1。所有概率都是非负的,因此使用此阈值,您将为每个观察值预测“正”。从某种角度讲,这很好,因为您的假阴性率为0.0。但是,您的假阳性率也为1.0的极高值,因此从这个意义上讲,您选择-1为阈值是很糟糕的。
当然,理想的是TPR为1.0,FPR为0.0,FNR为0.0。但这在现实应用中通常是不可能的,因此问题就变成了“我愿意为多少TPR接受多少FPR?” 这就是roc曲线的动机。
但是改变阈值将改变预测的分类。这是否意味着阈值是超参数?
是的,确实如此。它是决策规则的超参数,但不是基础回归。
如果是这样,为什么(例如)为什么不能使用scikit-learn的GridSearchCV方法轻松地在阈值网格上进行搜索(就像对正则化参数C所做的那样)。
这是sklearn中的设计错误。对于大多数分类方案而言,最佳实践是使用对这些概率的质量的某种度量(例如逻辑回归中的对数损失)来拟合基础模型(预测概率)。之后,应调整这些概率的决策阈值,以优化分类规则的某些业务目标。该库应该可以轻松地基于某种质量度量来优化决策阈值,但是我认为它做得不好。
我认为这是sklearn弄错的地方之一。该库predict
在所有分类模型中都包含一个方法,该方法的阈值为0.5
。这种方法没有用,我强烈建议永远不要调用它。不幸的是,sklearn没有鼓励更好的工作流程。
predict
方法的默认选择0.5(作为临界值)的怀疑,但是GridSearchCV
接受scorer
可以针对样本外交叉熵损失调整模型的对象。我想念你的意思吗?