对 sklearn 的 roc_auc_score 方法的困惑

Confusion on sklearn's roc_auc_score method

我从来没有真正去推导出 ROC-AUC 分数。我只是理所当然地使用它。但是我最近接受了修改指标的任务,我发现这个指标很混乱。

假设二进制 classification 案例,并引用文档:

y_score : array-like of shape (n_samples,) or (n_samples, n_classes)

Target scores. In the binary and multilabel cases, these can be either probability estimates or non-thresholded decision values (as returned by decision_function on some classifiers).

我发现这个指标可能有两个“定义”...一个虚拟的例子特此说明我们的正数 class 是 1,负数是 0。

y_true:6个输入的真实标签。

y_preds:输入的预测概率(sigmoid/softmax)为正(class1)。

y_preds_labels:假设 $T=0.5$ 的阈值,我们可以在 y_preds 中应用 np.argmax sigmoid/softmax 预测来得到它。

现在,我震惊地发现 roc_1 给出了 0.3888888888888889 而 roc_2 给出了 0.5。人们会认为 0.5 是正确的答案,不是吗,因为该模型具有最大的真阳性和假阳性...现在我应该使用哪个...?

y_true = [0,0,1,1,0,1]
y_preds = [0.3, 0.3, 0.1, 0.3, 0.1, 0.2]
y_pred_labels = [0,0,0,0,0,0]
roc_1 = roc_auc_score(y_true, y_preds)
roc_2 = roc_auc_score(y_true, y_pred_labels)

编辑:根据解释,我明白 roc_2 是不正确的。但是,当我尝试以下操作时,分数给出了另一个值,即使“预测”在技术上是相同的。所以我现在明白 ROC 是一个排名指标,但我意识到网上对此几乎没有 derivations/simulations(大多数文章都在解释 precision/recall/sensitivity 的想法并将其链接到 TPR,FPR。我想更深入地解释为什么 y_preds_3 给我的 ROC-AUC 分数与 y_preds 大不相同。

y_true = [0,0,1,1,0,1]
y_preds_3 = [0.3,0.4,0.2,0.4,0.1,0.3]
roc_3 = roc_auc_score(y_true, y_preds_3)

这里的post给了我一些直觉,但我希望有人能link/explain给我一个更详细的例子。

为了计算 ROC AUC 分数,您需要估计概率(如您引用的文档所述)。您可能会对“非阈值决策值”一词感到困惑,但这并没有描述预测标签(而是决策函数,就像您可以在支持向量分类中找到的那样(SVC,其中预测概率不可用) .

因此在您的示例中,roc_1 是正确的,而 roc_2 不是。