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

一:基础介绍

1、PR曲线与ROC曲线的定义

把正例正确判定为正例,表示为TP(true positive)

把正例错误判定为负例,表示为FN(false negative)

把负例正确判定为负例,表示为TN(true negative)

把负例错误判定为正例,表示为FP(false positive)

通过混淆矩阵可以计算出精确率precision 召回率recall :
Precision=TP/(TP+FP)


Recall=TP/(TP+FN)


TPR=TP/(TP+FN)


FPR=FP/(FP+TN)

Precision的具体含义其实就是预测为正例的样本中预测正例中所占的比例。

Recall的具体含义就是预测正确的正例的样本在所有真正正例样本中的比例。

TPR的具体含义就是预测正确的正例样本在所有真正正例样本中的比例,跟Recall一样。

TFR的具体含义就是预测正确的反例样本在所有真正反例样本中的比例。
 

如上,P-R曲线就是Recall为横轴、Precision为纵轴绘制的一条曲线,表示在所取的阈值不一样时,对应的precision值与recall值,然后构成一条曲线。

而ROC曲线则是PR曲线横轴、纵轴的度量发生变化,横轴是FPR,纵轴是TPR。

PR曲线

在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为"最可能"是正例的样本,排在最后的则是学习器认为"最不可能"是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率,以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称"

### 机器学习中的PR曲线ROC曲线 #### PR曲线概念 精确率-召回率曲线Precision-Recall Curve,简称PR曲线)是一种用于评估分类模型性能的工具。它通过在不同阈值下绘制精确率(Precision)和召回率(Recall)的变化趋势来反映模型的表现[^3]。 - **精确率 (Precision)** 表示被预测为正类的样本中有多少比例实际上是正类。 - **召回率 (Recall)** 则衡量实际正类中有多大比例被成功识别为正类。 对于类别分布不均衡的情况,PR曲线能够更好地体现模型对少数类别的区分能力[^4]。 #### ROC曲线概念 接收者操作特性曲线(Receiver Operating Characteristic Curve,简称ROC曲线)同样用来评价二分类模型的好坏。其核心思想是在不同的决策阈值下观察假阳率(False Positive Rate, FPR)和真阳率(True Positive Rate, TPR)之间的权衡关系[^1]。 - **FPR** 定义为错误标记为正类的比例。 - **TPR** 是指正确检测到的实际正类所占总正类的比例。 通常认为,当ROC曲线越接近左上角时,说明该分类器具有更好的辨别力。 #### 联系与区别 两者均基于调整分类边界得到多组统计量并绘制成图形来进行质量评判,但它们侧重点有所不同: - **共同点**: 都依赖于改变判定界限从而获取多个可能的结果组合; - **主要差异**: - 应用场合方面,在面对极度倾斜的数据集时,由于PR图仅考虑目标群体内部情况而不受背景干扰影响较大这一特点使其成为首选方案之一。 - 另外从直观感受上看,AUC值可以作为整体效能度量标准应用于两种图表之中,不过具体数值意义会因类型各异而有所偏差[^5]。 ```python import numpy as np from sklearn.metrics import precision_recall_curve, roc_curve # 假设y_true是真实标签,y_scores是预测得分 precision, recall, _ = precision_recall_curve(y_true, y_scores) fpr, tpr, _ = roc_curve(y_true, y_scores) def plot_curves(): import matplotlib.pyplot as plt fig, ax = plt.subplots() # 绘制PR曲线 ax.plot(recall, precision, label='PR curve') # 绘制ROC曲线 ax.plot(fpr, tpr, label='ROC curve', linestyle="--") ax.set_xlabel('Recall / False Positive Rate') ax.set_ylabel('Precision / True Positive Rate') ax.legend(loc="best") plt.show() plot_curves() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值