机器学习性能评估指标之PR曲线(Precision-Recall Curve)

PR曲线是评估分类模型性能的重要工具,特别适用于类别不平衡或需要重点关注正类识别能力的任务(如疾病诊断、欺诈检测)。以下从定义、绘制方法、应用场景及实际案例展开解析:


一、PR曲线的定义

1. ​核心指标
  • 精确率(Precision)​

    衡量预测为正类的样本中真实正类的比例。

  • 召回率(Recall,即敏感度)​

    衡量真实正类样本中被正确预测的比例。

2. ​PR曲线的构成
  • 横轴:召回率(Recall),范围[0, 1]。
  • 纵轴:精确率(Precision),范围[0, 1]。
  • 曲线形状:通过调整分类阈值,计算不同阈值下的(Recall, Precision)点并连接成曲线。

二、PR曲线的绘制步骤

  1. 排序预测概率:将测试集样本按模型输出的正类概率从高到低排序。
  2. 调整分类阈值:从高到低遍历概率阈值(如0.9, 0.8, ..., 0.1),逐个判定样本为正类。
  3. 计算Precision与Recall:在每个阈值下统计TP、FP、FN,计算对应的P和R。
  4. 连接所有点:将不同阈值下的(Recall, Precision)点按顺序连接,形成PR曲线。
示例数据
样本真实标签预测概率阈值=0.8时预测结果
A0.95正(TP)
B0.90正(FP)
C0.85正(TP)
D0.75负(TN)
  • 当阈值为0.8时:
    • TP=2(A、C),FP=1(B),FN=0(未漏检)。
    • Precision=2/(2+1)=0.67,Recall=2/(2+0)=1.0(假设总正类为2个)。
  • 重复计算不同阈值下的点,绘制曲线。

三、PR曲线 vs ROC曲线

指标横轴纵轴适用场景
PR曲线召回率(Recall)精确率(Precision)类别高度不平衡(正类<10%)
ROC曲线假正率(FPR)召回率(TPR)类别相对均衡
关键区别
  • 类别不平衡时
    • ROC曲线可能因大量负类样本而虚高(FPR易降低)。
    • PR曲线直接反映正类的识别能力,更敏感于模型改进。
  • 实例对比
    • 若正类仅占1%,模型A的ROC-AUC=0.9,但PR曲线可能显示AP=0.3,说明模型对正类识别能力不足。

四、PR曲线的应用场景

1. ​类别不平衡任务
  • 示例
    • 欺诈交易检测(正类占比0.1%)。
    • 疾病筛查(患病样本极少)。
  • 优势:避免准确率(Accuracy)的误导,直接反映少数类的识别效果。
2. ​需权衡精确率与召回率的场景
  • 高Recall需求:医疗诊断中需减少漏诊(FN),允许一定FP。
  • 高Precision需求:法律判决中需减少误判(FP),允许一定FN。
  • PR曲线的作用:帮助选择最优阈值(如通过曲线拐点确定平衡点)。
3. ​模型性能对比
  • 曲线位置
    • 曲线越靠近右上角(Precision和Recall均高),模型性能越好。
    • 曲线接近水平线(Precision低),说明模型无法有效识别正类。

五、PR曲线的局限性

  1. 阈值敏感:曲线形状依赖分类阈值的调整策略。
  2. 样本量影响:正类样本极少时,曲线可能不稳定。
  3. 多分类扩展:需通过“一对多”策略为每个类别单独绘制PR曲线。

六、关键指标:平均精度(Average Precision, AP)​

1. ​定义
  • AP是PR曲线下面积的近似值,综合反映模型在所有阈值下的平均性能。
  • 计算方式
    • 11点插值法(PASCAL VOC)​:在11个召回率点(0.0, 0.1, ..., 1.0)取最大精确率,计算均值。
    • 全点插值法(COCO)​:对每个召回率点插值精确率,积分计算面积。
2. ​示例计算

假设PR曲线上有以下点:
(Recall=0.2, Precision=1.0), (Recall=0.4, Precision=0.8), (Recall=0.6, Precision=0.6)

  • AP(11点插值)​:在召回率0.0、0.1、…、1.0处取最大精确率,例如:
    • 召回率≥0.4时,最大精确率为0.8。
    • AP = (1.0 + 1.0 + 0.8 + ...) / 11 ≈ 0.72

七、实际案例:癌症诊断模型

数据分布
  • 正类(患病):100例
  • 负类(健康):9900例
  • 模型A:Recall=0.90,Precision=0.30
  • 模型B:Recall=0.70,Precision=0.50
PR曲线分析
  • 模型A:高Recall但低Precision,适合减少漏诊(如初步筛查)。
  • 模型B:平衡性能,适合确诊阶段(需减少误诊)。
  • 选择依据:根据医疗场景需求,通过PR曲线确定阈值或模型。

八、代码实现(Python)​

import matplotlib.pyplot as plt
from sklearn.metrics import precision_recall_curve, average_precision_score

# 示例数据
y_true = [1, 0, 1, 0, 1, 1, 0, 1]
y_scores = [0.9, 0.8, 0.7, 0.6, 0.55, 0.54, 0.53, 0.4]

# 计算PR曲线和AP
precision, recall, _ = precision_recall_curve(y_true, y_scores)
ap = average_precision_score(y_true, y_scores)

# 绘制PR曲线
plt.plot(recall, precision, marker='.', label=f'AP={ap:.2f}')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('PR Curve')
plt.legend()
plt.show()

九、总结

  • PR曲线的核心价值:在类别不平衡时准确评估模型对正类的识别能力。
  • 使用建议
    1. 优先选择PR曲线而非ROC曲线处理高度不平衡数据。
    2. 结合AP指标量化模型性能。
    3. 根据业务需求选择阈值(如高Recall或高Precision)。
  • 注意事项:理解不同插值方法对AP计算的影响,并在多分类任务中分开展示各类别PR曲线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浩瀚之水_csdn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值