机器学习——ROC曲线、PR曲线

一、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.导入所需要的包

python 复制代码
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.加载数据集,进行训练

python 复制代码
 随机生成数据集
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曲线

python 复制代码
# 计算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曲线

python 复制代码
# 绘制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曲线更适合评估模型在不平衡数据集上的表现
相关推荐
棋子入局20 分钟前
大语言模型
人工智能
James. 常德 student26 分钟前
RNN - 序列模型
人工智能·rnn·深度学习
风筝超冷1 小时前
GPT - 2 文本生成任务全流程
人工智能·gpt-2
说私域3 小时前
开源链动2+1模式、AI智能名片与S2B2C商城小程序融合下的社交电商营销新范式
人工智能·小程序·开源·零售
Mapmost5 小时前
【数据可视化艺术·实战篇】视频AI+人流可视化:如何让数据“动”起来?
人工智能·信息可视化·实时音视频·数字孪生·demo
_一条咸鱼_6 小时前
AI 大模型的 MCP 原理
人工智能·深度学习·面试
_一条咸鱼_6 小时前
AI 大模型 Function Calling 原理
人工智能·深度学习·面试
寰宇视讯6 小时前
金山科技在第91届中国国际医疗器械博览会CMEF 首发新品 展现智慧装备+AI
大数据·人工智能·科技
訾博ZiBo6 小时前
AI日报 - 2025年04月17日
人工智能
耿雨飞7 小时前
二、The Power of LLM Function Calling
人工智能·大模型