对 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
不是。
我从来没有真正去推导出 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
不是。