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