sklearn 分类器 - 最大化 auc 的 predict_proba 阈值
Posted
技术标签:
【中文标题】sklearn 分类器 - 最大化 auc 的 predict_proba 阈值【英文标题】:sklearn classifier - predict_proba threshold that maximizes auc 【发布时间】:2018-08-14 08:21:14 【问题描述】:我有一个三类分类问题。我训练分类器,然后绘制不同类别的 ROC。
我需要为每个类获取最大化 TPR 和最小化 FPR 的阈值。在 Matlab 中,这是返回的。有没有办法在 python / sklearn 中检索它?
谢谢。
【问题讨论】:
roc_curve
返回 tpr、fpr 和阈值。您不能以适当的方式同时最大化 TPF 和最小化 FPR。 I 你只是想在曲线上找到最靠近图表左上角的点 (0, 1)?
@Quickbeam2k1 我有函数输出的 TPR、FPR 和阈值数组。是的,我需要曲线上最靠近左上角的点的阈值。
【参考方案1】:
所以我的想法是这样的:
import numpy as np
idx = np.linalg.norm(
(np.array([[0, 1]]) -np.stack([fpr, tpr], axis=1)),
axis=1).argmax()
max_thresh = thresholds[idx]
这里做了什么:将 FPR 和 TPR 堆叠在一起作为 2D 向量。减去向量每一行的左上角并取范数。这计算距离。取 argmax 可以知道最大值出现在哪一行。最后,返回该索引处的阈值
【讨论】:
用 np.array([[0, 1]],我得到右上角,我用 np.array([[1, 0]] 得到左上角。谢谢! hmm,但如果 FPR 是 x 轴,TPR 是 y 轴 -> 那么 (0,1) 应该是正确的点。不过,如果它适合你,我也很高兴 @DreX 如果答案解决了您的问题,请接受(答案会占用受访者的宝贵时间)以上是关于sklearn 分类器 - 最大化 auc 的 predict_proba 阈值的主要内容,如果未能解决你的问题,请参考以下文章
sklearn 分类度量 auc 返回 ValueError
如何在 sklearn 中获取用于二进制分类的 roc auc
使用 sklearn 的 roc_auc_score 进行 OneVsOne 多分类?
VotingClassifier 中的 roc_auc,scikit-learn (sklearn) 中的 RandomForestClassifier
sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix,cla