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

机器学习:基于sklearn的AUC的计算原理