AUC PR曲线 学习曲线

AUC(Area Under Curve)被定义为ROC曲线下的面积。我们往往使用AUC值作为模型的评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

其中,ROC曲线全称为受试者工作特征曲线 (receiver operating characteristic curve),它是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(敏感性)为纵坐标,假阳性率(1-特异性)为横坐标绘制的曲线

AUC就是衡量学习器优劣的一种性能指标。从定义可知,AUC可通过对ROC曲线下各部分的面积求和而得。

ROC曲线的意义

(1)主要作用

1.ROC曲线能很容易的查出任意阈值对学习器的泛化性能影响。

2.有助于选择最佳的阈值。ROC曲线越靠近左上角,模型的准确性就越高。最靠近左上角的ROC曲线上的点是分类错误最少的最好阈值,其假正例和假反例总数最少。

3.可以对不同的学习器比较性能。将各个学习器的ROC曲线绘制到同一坐标中,直观地鉴别优劣,靠近左上角的ROC曲所代表的学习器准确性最高。

(2)优点

  1. 该方法简单、直观、通过图示可观察分析学习器的准确性,并可用肉眼作出判断。ROC曲线将真正例率和假正例率以图示方法结合在一起,可准确反映某种学习器真正例率和假正例率的关系,是检测准确性的综合代表。

  2. ROC曲线不固定阈值,允许中间状态的存在,利于使用者结合专业知识,权衡漏诊与误诊的影响,选择一个更加的阈值作为诊断参考值。

AUC

如果两条ROC曲线没有相交,我们可以根据哪条曲线最靠近左上角哪条曲线代表的学习器性能就最好。但是,实际任务中,情况很复杂,如果两条ROC曲线发生了交叉,则很难一般性地断言谁优谁劣。在很多实际应用中,我们往往希望把学习器性能分出个高低来。在此引入AUC面积。

在进行学习器的比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性的断言两者孰优孰劣。此时如果一定要进行比较,则比较合理的判断依据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。

首先,AUCPR曲线是用于评估二元分类模型的性能指标,需要有真实标签和预测概率(或logits)作为输入。 对于AUC曲线,可以按照以下步骤进行绘制: 1. 从模型输出的logits中计算出预测概率(或使用sigmoid函数进行转换)。 2. 将真实标签和预测概率按照预测概率从大到小排序。 3. 遍历每个预测概率作为阈值,计算出对应的真正率(TPR)和假正率(FPR)。 4. 将每个TPR和FPR值作为坐标绘制ROC曲线,计算出曲线下面积即为AUC值。 对于PR曲线,可以按照以下步骤进行绘制: 1. 从模型输出的logits中计算出预测概率(或使用sigmoid函数进行转换)。 2. 将真实标签和预测概率按照预测概率从大到小排序。 3. 遍历每个预测概率作为阈值,计算出对应的精确率(precision)和召回率(recall)。 4. 将每个精确率和召回率值作为坐标绘制PR曲线,计算出曲线下面积即为PR值。 在Python中,可以使用scikit-learn库中的roc_curve和precision_recall_curve函数计算ROC曲线PR曲线,并使用matplotlib库进行绘制。具体代码可以参考以下示例: ```python from sklearn.metrics import roc_curve, precision_recall_curve, auc import matplotlib.pyplot as plt # 计算ROC曲线AUC值 fpr, tpr, thresholds = roc_curve(y_true, y_pred) roc_auc = auc(fpr, tpr) # 绘制ROC曲线 plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, 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') plt.legend(loc="lower right") plt.show() # 计算PR曲线PRprecision, recall, thresholds = precision_recall_curve(y_true, y_pred) pr_auc = auc(recall, precision) # 绘制PR曲线 plt.plot(recall, precision, color='darkorange', lw=2, label='PR curve (area = %0.2f)' % pr_auc) plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall curve') plt.legend(loc="lower right") plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值