深度学习中ROC曲线和PR曲线及引申的相关知识

本文介绍了ROC曲线的基本概念,包括其原理、画图方法以及AUC值的重要性。同时讨论了Precision-Recall曲线的区别,并通过实例说明在不同场景下的应用,如地震预测和嫌疑人定罪中的精度与召回率权衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

申明:资料来源参考文献

参考文献: 
小白也能看懂的 ROC 曲线详解! (qq.com)

ROC曲线 AUC (Area Under Curve) - 知乎 (zhihu.com)

Precision-Recall (PR) 曲线-在信息检索重要性 - 知乎 (zhihu.com)

接受者操作特征曲线_百度百科 (baidu.com)

深度学习,误检率,漏检率计算_漏检率和误检率公式-CSDN博客

 


from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
 
y_true = [1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
y_pred = [1, 1, 0, 1, 1, 0, 0, 0, 0, 0]
print("acc:", accuracy_score(y_true, y_pred))
print("p:", precision_score(y_true, y_pred))
print("r:", recall_score(y_true, y_pred))
print("f1:", f1_score(y_true, y_pred))

 

输出结果为:

acc: 0.7

p: 0.5

r: 0.6666666666666666</

### PR曲线的定义 PR曲线Precision-Recall Curve)是一种用于评估分类模型性能的工具,尤其在深度学习中,它对于类别不平衡问题表现得尤为重要。PR曲线的横轴是召回率(Recall),表示模型正确识别出的正类占所有实际正类的比例;纵轴是精确率(Precision),表示模型预测为正类的样本中实际为正类的比例。通过调整分类模型的阈值,可以得到一系列的精确率召回率值,这些值可以用来绘制PR曲线[^2]。 ### PR曲线的计算方法 1. **精确率(Precision)**: $$ Precision = \frac{TP}{TP + FP} $$ 其中,TP(True Positive)表示模型正确预测为正类的样本数量,FP(False Positive)表示模型错误预测为正类的样本数量。 2. **召回率(Recall)**: $$ Recall = \frac{TP}{TP + FN} $$ 其中,FN(False Negative)表示模型错误预测为负类的样本数量。 3. **绘制PR曲线**: - 首先,通过调整分类模型的阈值,生成一系列的精确率召回率值。 - 然后,将这些值在PR坐标系中绘制成点。 - 最后,将这些点连接起来,形成PR曲线。 4. **平均精度(Average Precision, AP)**: - 平均精度是PR曲线下面积的一种近似计算方法,通常用于评估模型的整体性能。 - 计算公式为: $$ AP = \sum_{i=1}^{n} (Recall_i - Recall_{i-1}) \times Precision_i $$ 其中,$i$ 表示不同的阈值点。 ### PR曲线的应用场景 PR曲线深度学习中有广泛的应用,特别是在以下几种场景中: 1. **类别不平衡问题**: - 当数据集中正类样本远少于负类样本时,PR曲线ROC曲线更能准确反映模型的性能。例如,在疾病诊断或欺诈检测任务中,正类样本通常是少数类,PR曲线可以帮助开发者更关注模型对正类的识别能力[^1]。 2. **目标检测**: - 在目标检测任务中,PR曲线常用于评估模型在不同阈值下的性能。例如,在COCO数据集上,平均精度(mAP)是衡量目标检测模型性能的重要指标。 3. **图像分类**: - 在图像分类任务中,PR曲线可以用于评估模型对特定类别的识别能力。例如,在医学图像分类中,模型需要高召回率以避免漏诊,同时保持较高的精确率以减少误诊。 4. **自然语言处理**: - 在自然语言处理任务中,PR曲线可以用于评估模型在文本分类、实体识别等任务中的性能。例如,在垃圾邮件检测任务中,模型需要高精确率以避免将正常邮件误判为垃圾邮件。 ### 示例代码 以下是一个使用PythonScikit-learn库绘制PR曲线的示例代码: ```python from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt # 假设y_true是真实标签,y_scores是模型预测的概率 y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0] y_scores = [0.9, 0.1, 0.8, 0.75, 0.2, 0.85, 0.3, 0.15, 0.95, 0.1] # 计算精确率召回率 precision, recall, thresholds = precision_recall_curve(y_true, y_scores) # 绘制PR曲线 plt.plot(recall, precision, marker='.') plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall Curve') plt.show() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

奋斗的蜗牛小猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值