keras ROC曲线位置标签混淆

dohp0rv5  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(113)

我有一个关于scikit-learn的深度学习练习的问题,我注意到我的数据有1作为积极的标签。在我训练后,测试准确率约为74%,但ROC曲线下面积(AUC)得分仅为0.24。

y_pred = model.predict([x_test_real[:, 0],x_test_real[:, 1]])
fpr, tpr, thresholds = metrics.roc_curve(y_test_real, y_pred,pos_label=1)
roc_auc = metrics.auc(fpr, tpr)
print("roc_auc:  %0.2f" % roc_auc)

如果我将pos_label更改为0,auc得分将变为0.76(显然)

y_pred = model.predict([x_test_real[:, 0],x_test_real[:, 1]])
fpr, tpr, thresholds = metrics.roc_curve(y_test_real, y_pred,pos_label=0)
roc_auc = metrics.auc(fpr, tpr)
print("roc_auc:  %0.2f" % roc_auc)

现在我运行了一个小实验,我改变了我的训练和测试标签(这是二进制分类)

y_train_real = 1 - y_train_real
y_test_real = 1 - y_test_real

像这样,这应该会将正负标签从1翻转到0。然后我再次运行代码。这一次我希望roc auc的行为也会翻转。但是没有!

fpr, tpr, thresholds = metrics.roc_curve(y_test_real, y_pred,pos_label=0)

仍然是0.80,而pos_label=1是0.2。这让我很困惑,

  • 如果我更改了训练目标中的正标签,是否不会影响roc_curve auc值?
  • 哪种情况是正确的分析
  • 输出与使用的损失函数有关系吗?我正在使用“对比损失”解决匹配和不匹配的二元分类问题

有人能帮我吗?:)

hzbexzde

hzbexzde1#

如果你能像这样发布代码和输出就太好了-

import numpy as np
from sklearn import metrics

y_pred = np.random.rand(100,)

y_true = np.random.randint(0,2,(100,))

fpr, tpr, thresholds = metrics.roc_curve(y_true, y_pred, pos_label=1)
print(metrics.auc(fpr, tpr))

fpr, tpr, thresholds = metrics.roc_curve(y_true, y_pred, pos_label=0)
print(metrics.auc(fpr, tpr))

y_true_new = 1 - y_true

fpr, tpr, thresholds = metrics.roc_curve(y_true_new, y_pred, pos_label=1)
print(metrics.auc(fpr, tpr))

fpr, tpr, thresholds = metrics.roc_curve(y_true_new, y_pred, pos_label=0)
print(metrics.auc(fpr, tpr))

输出-

0.5291047771979125
0.4708952228020875
0.4708952228020875
0.5291047771979125

相关问题