问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

机器学习中的ROC曲线与PR曲线详解

创作时间:
作者:
@小白创作中心

机器学习中的ROC曲线与PR曲线详解

引用
CSDN
1.
https://blog.csdn.net/2301_80841566/article/details/146510859

一、ROC曲线简介

1.1 ROC曲线的构成

1.横轴(假正率,FPR)
表示负样本被错误分类为正的比例(越小越好)

2.纵轴(真正率,TPR,即召回率)
表示正样本被正确识别的比例(越大越好)

3.曲线绘制:通过调整分类阈值(如逻辑回归的概率阈值),计算不同阈值下的(FPR, TPR)点,连接这些点形成曲线

1.2 关键指标:AUC

1.AUC:ROC曲线下的面积,范围在0.5(随机猜测)到1(完美模型)之间

  • AUC = 0.9:模型有90%的概率将随机正样本排在负样本之前
  • AUC对类别分布不敏感,适合不平衡数据评估

1.3 ROC曲线的核心作用

1.模型性能比较:AUC越高,模型整体区分能力越强
2.阈值选择:通过曲线形状选择最佳分类阈值(如平衡误诊与漏诊的医疗场景)
3.可视化权衡:曲线越靠近左上角,模型在TPR和FPR间的权衡越好

1.4 ROC vs. 精确率-召回率曲线(PR Curve)

1.ROC:关注整体排序能力,适合类别相对均衡的场景
2.PR Curve:聚焦正类的识别质量(精确率 vs. 召回率),更适合极端类别不平衡(如欺诈检测)

1.5 实例应用

1.医学诊断:调整阈值以降低漏诊(提高TPR)或减少误诊(降低FPR)
2.信用评分:通过AUC评估模型区分高风险/低风险客户的能力

二、PR曲线简介

2.1 PR曲线的构成

1.横轴(召回率,即TPR)
表示正样本被正确识别的比例(关注“漏检”问题)

2.纵轴(精确率)
表示预测为正的样本中实际为正的比例(关注“误检”问题)

3.曲线绘制:通过调整分类阈值(如概率阈值),计算不同阈值下的(Recall, Precision)点,连接这些点形成曲线

2.2 关键指标:AUC-PR

1.AUC-PR:PR曲线下的面积,范围在0(最差)到1(完美模型)之间

  • 类别越不平衡,AUC-PR的评估越敏感。例如,在欺诈检测中,正样本占比仅1%时,AUC-PR比AUC-ROC更有参考价值

2.3 PR曲线的核心作用

1.聚焦正类性能:直接反映模型对正类的识别能力,避免负类数量主导评估结果
2.高不平衡场景:当正样本极少时(如罕见病诊断、欺诈检测),PR曲线比ROC曲线更可靠
3.阈值选择:通过曲线形状选择平衡精确率和召回率的最佳阈值(例如,医疗场景需高召回率,推荐系统需高精确率)

2.4 PR曲线 vs ROC曲线

对比维度
PR曲线
ROC曲线
核心关注点
正类的识别质量(Precision vs. Recall)
整体排序能力(TPR vs. FPR)
使用场景
正样本极少(极端不平衡)
类别相对均衡或关注整体性能
对类别不平衡敏感度
高度敏感
不敏感(因FPR受负类数量影响较小)
AUC解释
AUC-PR越低,模型漏检或误检越严重
AUC-ROC反映整体排序能力

2.5 实例应用

1.罕见病筛查:需高召回率(减少漏诊),允许一定误诊(低精确率)
2.垃圾邮件检测:需高精确率(避免正常邮件被误判为垃圾),可容忍少量漏检(低召回率)
3.推荐系统:平衡精确率(推荐内容相关性)和召回率(覆盖用户兴趣范围)

2.6 注意事项

1.负样本主导时慎用:若负样本占比过高(如99%),PR曲线可能波动较大,需结合其他指标(如F1分数)
2.随机基线的差异:ROC曲线的随机基线是AUC=0.5,而PR曲线的随机基线为:
例如正样本占1%,随机模型的AUC-PR ≈ 0.01

三、代码实现

1.导入所需要的包

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score

2.加载数据集,进行训练

# 随机生成数据集
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(random_state=42)
clf.fit(X_train, y_train)
# 获取预测结果
y_pred_proba = clf.predict_proba(X_test)[:, 1]

3.计算ROC曲线和PR曲线

# 计算ROC曲线
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)
# 计算PR曲线
precision, recall, _ = precision_recall_curve(y_test, y_pred_proba)
average_precision = average_precision_score(y_test, y_pred_proba)

4.绘制ROC曲线和PR曲线

# 绘制ROC曲线
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})')
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 (ROC) Curve')
plt.legend(loc="lower right")
# 绘制PR曲线
plt.subplot(1, 2, 2)
plt.plot(recall, precision, color='blue', lw=2, label=f'PR curve (AP = {average_precision:.2f})')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall (PR) Curve')
plt.legend(loc="best")
# 显示图像
plt.tight_layout()
plt.show()

四、曲线可视化展示

4.1 曲线截图

4.2 图像分析

1.ROC曲线分析

  • ROC曲线:展示了分类模型在不同阈值下的真阳性率(TPR)与假阳性率(FPR)之间的关系。
  • 曲线下的面积(AUC):图中显示AUC为0.92,表示模型具有很高的区分能力。AUC值越接近1,模型性能越好。
  • 对角线:图中的虚线表示随机猜测的模型性能,曲线越远离这条线,模型性能越好。

2.PR曲线分析

  • PR曲线:展示了分类模型在不同阈值下的精确率(Precision)与召回率(Recall)之间的关系。
  • 平均精确率(AP):图中显示AP为0.94,表示模型在不同召回率下的精确率平均值很高,说明模型在处理不平衡数据集时表现良好。
  • 曲线形状:曲线越靠近左上角,模型性能越好。图中曲线在大部分区域都保持较高的精确率,说明模型在不同召回率下都能保持较高的精确度。

3.总结

  • 这两个图表明该模型在分类任务中表现优异,具有很高的区分能力和精确度。
  • ROC曲线适合评估模型的整体性能,而PR曲线更适合评估模型在不平衡数据集上的表现
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号