ROC曲线的绘制与逆转

如果我们已知概率和标签就可以画出一条ROC曲线 

 我们发现roc曲线在对角线的下方,曲线下面积AUC低于0.5,这通常意味着你的模型在预测时完全相反,例如,你的模型将真实为1的样本预测为0,将真实为0的样本预测为1。这是不对的,需要进行反转,在对角线的上方,使用(1-概率);

对ROC进行逆转

在这种情况下,一个简单的解决方法是反转你的预测概率。假设你的预测概率存在 y_scores 中,你可以通过 1 - y_scores 或者[1 - score for score in y_scores]来反转预测概率。然后再用新的预测概率来计算ROC曲线和AUC值,就能得到一个在对角线上方,且AUC值高于0.5的ROC曲线了。

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import numpy as np

# 已知概率和标签
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.9 , 0.6 , 0.65, 0.2])

# 反转预测概率,模拟一个表现很差的分类器
y_scores_bad = 1 - y_scores

# 反转预测的概率
# y_scores_bad = [1 - score for score in y_scores]

# 计算ROC曲线
fpr, tpr, thresholds = roc_curve(y_true, y_scores_bad)
roc_auc = auc(fpr, tpr)

# 绘制ROC曲线
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic example')
plt.legend(loc="lower right")
plt.show()

 

理论上,ROC曲线可以在对角线的下方,但这种情况在实际应用中是非常少见的。因为如果模型的ROC曲线在对角线的下方,那意味着该模型的预测效果反而不如随机猜测。具体来说,如果模型的ROC曲线在对角线的下方,这通常意味着模型在预测正负样本时完全相反。

例如,如果一个二分类问题的模型,把真实为1的样本预测为0,把真实为0的样本预测为1,那么其ROC曲线可能会出现在对角线的下方。这种情况下,只需要反转模型的预测结果,就可以使得ROC曲线回到对角线的上方,模型的性能也会大幅提升。

总的来说,如果你的模型的ROC曲线在对角线的下方,这通常是模型出现了严重错误的标志,你应该检查你的模型或者数据。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值