ROC曲线与PR曲线

一.ROC曲线

1.什么是ROC曲线

ROC曲线(Receiver Operating Characteristic curve)是一种用于评估分类模型性能的工具。它通常用于二分类问题,比如判断病人是否患有某种疾病、邮件是否为垃圾邮件等。

在ROC曲线中,横轴表示伪阳性率(False Positive Rate,FPR),纵轴表示真阳性率(True Positive Rate,TPR),又称为召回率(Recall)或灵敏度(Sensitivity)。ROC曲线的绘制过程是在不同的分类阈值下计算真阳性率和伪阳性率,并将它们绘制成曲线。曲线下面积即为AUC(Area Under the Curve),用于衡量分类器的性能,AUC值越接近1,分类器性能越好。

简单来说,ROC曲线可以帮助我们在不同的分类阈值下评估模型的性能,以及在选择合适的阈值时权衡真阳性率和伪阳性率。

2.ROC曲线的作用

ROC曲线有几个重要的作用:

  1. 评估模型性能: ROC曲线可以帮助评估分类模型的性能,特别是在处理不平衡数据集时。通过观察ROC曲线的形状和AUC值,可以直观地了解模型对不同类别的分类能力。

  2. 比较模型: 当有多个分类器对同一问题进行分类时,可以使用ROC曲线和AUC值来比较它们的性能。AUC值越大的模型通常更可靠。

  3. 选择最佳阈值: ROC曲线可以帮助选择最佳的分类阈值。根据具体应用场景的需求,可以通过观察曲线上的点来权衡真阳性率和伪阳性率,并选择最适合的阈值。

  4. 调整模型: 通过观察ROC曲线,可以识别模型的优势和劣势,指导进一步的模型调整和改进,以提高分类性能。

总之,ROC曲线是评估和比较分类模型性能的重要工具,可以帮助我们更好地理解模型的行为,并指导我们在实际应用中做出合适的决策。

3.ROC曲线的计算公式

ROC曲线的计算基于真阳性率(TPR)和伪阳性率(FPR),它们的计算公式如下:

真阳性率(TPR)也称为召回率(Recall)或灵敏度(Sensitivity):

伪阳性率(FPR):

其中,TP(True Positive)表示真阳性,即正样本被正确分类为正样本的数量;FN(False Negative)表示假阴性,即正样本被错误地分类为负样本的数量;FP(False Positive)表示假阳性,即负样本被错误地分类为正样本的数量;TN(True Negative)表示真阴性,即负样本被正确分类为负样本的数量。

ROC曲线是以不同的分类阈值为横坐标,TPR(召回率)为纵坐标绘制的。在绘制ROC曲线时,可以通过调整分类阈值来计算不同的TPR和FPR值,并将它们绘制成曲线。

另外,曲线下面积(AUC)也是ROC曲线的一个重要指标,它可以通过对ROC曲线下方的面积进行数值积分来计算,表示模型分类的平均性能。 AUC 的取值范围在0到1之间,AUC 值越接近1,表示模型的性能越好。

如图:

4.优劣比较

1:当一个曲线被另一个曲线完全包含了,则后者性能优于前者。

2:ROC曲线下方的面积(AUC)可以用来作为评估模型模型性能的指标.如当两个模型的ROC曲线发生交叉,则很难说哪一个模型更好,这时候可以用AUC来作为一个比较合理的判据。

二.PR曲线

1.什么是PR曲线

PR曲线(Precision-Recall curve)是另一种评估分类模型性能的工具,通常用于处理不平衡数据集或关注于正类别(少数类别)的分类问题。

在PR曲线中,横轴表示召回率(Recall),纵轴表示精确率(Precision)。召回率是指被模型正确识别为正类别的样本数占所有真实正类别样本数的比例,精确率是指被模型正确识别为正类别的样本数占所有模型判定为正类别的样本数的比例。

2.PR曲线作用

PR(Precision-Recall)曲线是评估分类模型性能的重要工具,其作用主要包括以下几个方面:

  1. 综合评估模型性能: PR曲线能够综合考虑分类模型的召回率(Recall)和精确率(Precision),因此提供了一个全面的性能评估。在某些情况下,比如处理不平衡数据集或者关注于正类别的分类问题时,PR曲线能够更好地反映模型的真实性能。

  2. 选择最佳模型: 通过比较不同模型在PR曲线下的面积(AUC-PR),可以帮助选择最佳的分类模型。AUC-PR 值越高,表示模型在不同召回率下的平均精确率越高,因此能够更好地区分正类别和负类别。

  3. 阈值选择: PR曲线可以帮助选择合适的分类阈值,以平衡召回率和精确率。根据具体的应用场景和需求,可以通过PR曲线找到最适合的分类阈值,使模型在召回率和精确率之间取得平衡,从而达到最佳的分类效果。

  4. 诊断模型: PR曲线可以帮助诊断模型的性能问题。通过观察PR曲线的形状和变化,可以发现模型在不同召回率下的表现,从而帮助识别模型的优势和不足之处,指导进一步的改进和优化。

综上所述,PR曲线在评估分类模型性能、选择最佳模型、调整分类阈值和诊断模型等方面具有重要作用,是分类模型评估中不可或缺的工具之一。

3.计算P值和R值

混淆矩阵:

在计算P(Precision,精确率)和R(Recall,召回率)时,需要考虑以下指标:

  • TP(True Positive,真阳性):被模型正确识别为正类别的样本数量。
  • FP(False Positive,假阳性):被模型错误识别为正类别的负样本数量。
  • FN(False Negative,假阴性):被模型错误识别为负类别的正样本数量。

根据这些指标,可以使用以下公式计算P和R:

 P(精准率)

p=\frac{TP}{TP+FP}

    R(召回率)

R=\frac{TP}{TP+FN}

简而言之,P值表示模型在所有被判定为正类别的样本中,真正为正类别的比例;而R值表示模型在所有真实正类别样本中,被正确判定为正类别的比例。

在实际应用中,可以通过混淆矩阵(Confusion Matrix)来计算这些指标,混淆矩阵可以明确记录模型对每个类别的分类结果,从而方便计算P和R值。

PR曲线如图:

4.优劣对比:

 ①曲线越靠近右上方,性能越好。(例如上图黑色曲线)

 ②当一个曲线被另一个曲线完全包含了,则后者性能优于前者。(例如橘蓝曲线,橘色优于蓝色)

 ③如果曲线发生交叉(黑橘曲线),判断依据:

  3.1:根据曲线下方面积大小判断,面积更大的更优于面积小的。

  3.2:根据平衡点F判断:平衡点是查准率与查重率相等时的点。F计算公式为F = 2 * P * R /(P +R ),F值越大,性能越好。

三.ROC曲线与PR曲线的对比

1.相似之处:

评估分类器性能: 两者都是用于评估二分类模型的性能,并且都是基于模型的混淆矩阵计算得出的。

阈值调整: 两者都可以通过调整分类器的阈值来改变分类结果,并且可以根据具体的应用需求来选择最佳的阈值。

2.不同之处

  1. 度量方式:

    • ROC曲线关注的是真正例率(True Positive Rate,召回率)和假正例率(False Positive Rate)之间的关系,其横轴是FPR,纵轴是TPR。
    • PR曲线关注的是精确率(Precision)和召回率之间的关系,其横轴是Recall,纵轴是Precision。
  2. 数据不平衡情况下的适用性:

    • ROC曲线在处理数据不平衡问题时具有鲁棒性,即使负类别样本数量远远大于正类别样本数量,ROC曲线也能够提供有效的性能评估。
    • PR曲线在处理数据不平衡问题时更为敏感,因为PR曲线的计算基于精确率和召回率,所以当正类别样本数量较少时,其性能评估更能体现模型在正类别上的表现。
  3. AUC计算方式:

    • ROC曲线下的面积(AUC-ROC)被定义为真正例率和假正例率之间的面积,其范围在0到1之间。
    • PR曲线下的面积(AUC-PR)被定义为精确率和召回率之间的面积,其范围也在0到1之间。
  4. 应用场景:

    ROC曲线适用于需要平衡正类别和负类别的问题,比如异常检测、欺诈检测等。                    PR曲线适用于关注于正类别的问题,特别是当正类别样本数量较少或者数据不平衡时,PR曲线更能反映模型的性能。                                                                                                     总的来说,ROC曲线和PR曲线都是重要的模型评估工具,在不同的应用场景下具有各自的优势和适用性。选择使用哪种曲线取决于具体的问题背景、数据分布以及评估指标的重要性。

四.绘制ROC曲线和PR曲线

导入所需要的包

from distutils.log import error
import matplotlib
import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt
from sklearn. model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import roc_curve
from sklearn.linear_model import LogisticRegression

加载数据集,进行训练,这里使用的是经典用于二分类任务的数据集, 随机森林分类器

# 生成示例数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练随机森林分类器
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)

# 预测概率值
y_score = clf.predict_proba(X_test)[:, 1]

计算ROC曲线和PR曲线

# 计算ROC曲线
fpr, tpr, _ = roc_curve(y_test, y_score)
roc_auc = auc(fpr, tpr)

# 计算PR曲线
precision, recall, _ = precision_recall_curve(y_test, y_score)
average_precision = average_precision_score(y_test, y_score)

绘制ROC曲线和PR曲线

# 绘制ROC曲线和PR曲线
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
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.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")

plt.subplot(1, 2, 2)
plt.plot(recall, precision, color='blue', lw=2, label='Precision-Recall curve (area = %0.2f)' % average_precision)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend(loc="lower left")

plt.tight_layout()
plt.show()

运行结果如下:

                                                               ROC曲线

                                                                          PR曲线

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ROC曲线(Receiver Operating Characteristic Curve)和PR曲线Precision-Recall Curve)是在二分类问题中常用的评估模型性能的工具,它们有一些区别和特点。 1. 目标不同: - ROC曲线关注的是真正例率(True Positive Rate,即召回率)与假正例率(False Positive Rate)之间的权衡。ROC曲线展示了在不同阈值下,分类器的敏感性和特异性之间的关系。 - PR曲线则关注的是精确率(Precision)与召回率(Recall)之间的权衡。PR曲线展示了在不同阈值下,分类器的预测准确性和查全率之间的关系。 2. 数据分布不平衡时的表现: - ROC曲线对于数据分布不平衡的情况下相对稳定,因为它使用了假正例率作为横轴,而假正例率不受真实负例数量的影响。 - PR曲线在数据分布不平衡时更能准确地反映分类器的性能,因为它使用了精确率作为纵轴,能够展示在正例中的正确预测比例。 3. 敏感性不同: - ROC曲线能够展示分类器在整个概率范围内的性能,对于不同的阈值都可以进行评估。 - PR曲线则更关注分类器在高概率(高置信度)区域的性能,对于低概率的预测结果较为敏感。 总而言之,ROC曲线主要用于评估分类器的整体性能,特别是在样本不平衡的情况下,而PR曲线则更适用于评估分类器在正例预测方面的性能。根据具体问题和需求,选择合适的曲线进行模型性能评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_73707081

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值