机器学习笔记——roc曲线

ROC曲线是评估二元分类模型的重要工具。它通过绘制真阳性率(TPR)与伪阳性率(FPR)的关系,展示了模型性能。ROC空间中的点越靠近左上角,代表模型预测力越强。曲线下面积(AUC)衡量模型的预测能力,AUC=1表示完美分类器,而AUC=0.5则表示随机猜测。

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

接受者操作特征曲线(receiver operating characteristic curve, 或者叫ROC曲线)。

1. 基本概念

分类器是将一个实例映射到一个特定类的过程。roc分析的是二元分类模型。

二元分类模型的个案预测有四种结局:

  1. 真阳性(TP):诊断为有,实际上也有病。
  2. 伪阳性(FP):诊断为有,实际上却没有病。
  3. 真阴性(TN):诊断为没有,实际上也没有病。
  4. 伪阴性(FN):诊断为没有,实际上却有病。

2. roc空间

ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。

  • TPR:在所有实际为阳性的样本中,被正确地判断为阳性之比率。
    $$ TPR = \frac{TP}{TP+FN}$$
  • FPR:在所有实际为阴性的的样本中,被错误地判断为阳性之比率。
    $$ FPR = \frac{FP}{FP+TN}$$

给定一个二元分类模型和它的阈值,就能从所有样本的(阳性/阴性)真实值和预测值计算出一个 (X=FPR, Y=TPR) 座标点。

从 (0, 0) 到 (1,1) 的对角线将ROC空间划分为左上/右下两个区域,在这条线的以上的点代表了一个好的分类结果(胜过随机分类),而在这条线以下的点代表了差的分类结果(劣于随机分类)。

完美的预测是一个在左上角的点,在ROC空间座标 (0,1)点,X=0 代表着没有伪阳性,Y=1 代表着没有伪阴性(所有的阳性都是真阳性);也就是说,不管分类器输出结果是阳性或阴性,都是100%正确。

 

 比如上图有4中预测结果:

  • 点与随机猜测线的距离,是预测力的指标:离左上角越近的点预测(诊断)准确率越高。离右下角越近的点,预测越不准。
  • 在A、B、C三者当中,最好的结果是A方法。
  • B方法
### 机器学习中的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、付费专栏及课程。

余额充值