ROC曲线

参考资料

ROC & AUC

题目

如何绘制ROC曲线?

Ø Why?(Introduction)

Ø What?(Formulation)

Ø How?(Pseudo Code& Demo Visualization)

Ø When?(Limitations and More)

AI生成内容

此文本格式为本人理解。

ROC(Receiver Operating Characteristic)曲线是评估二分类模型性能的重要工具。下面按照 Why(为什么)、What(定义)、How(如何实现)、When(适用性与局限性) 四个方面来讲解如何绘制 ROC 曲线。

1. Why?(为什么需要 ROC 曲线?)

在二分类问题中,我们通常使用模型预测概率,并通过设定一个阈值(threshold)\来决定分类结果。然而,选择不同的阈值会影响模型的*假阳性率(FPR)*和*真阳性率(TPR)*,因此我们需要 ROC 曲线 来直观展示这种权衡。

ROC 曲线的作用:

  • 比较不同模型的分类性能
  • 选择最佳决策阈值
  • 计算 AUC(曲线下面积),评估模型的整体性能
  • 检查模型是否存在严重偏倚(如随机猜测时,曲线接近对角线

2. What?(数学定义)

ROC曲线定义

ROC 曲线是 真阳性率(TPR)假阳性率(FPR) 的绘制,其中:

其中:

  • TP(True Positive):真正例
  • FP(False Positive):假正例
  • TN(True Negative):真反例
  • FN(False Negative):假反例

跟混淆矩阵有点像。

ROC 曲线的每个点对应不同的阈值,随着阈值从 1 降低到 0,模型更倾向于预测为正类,使得 TPR 和 FPR 逐步上升。

AUC(曲线下面积)

AUC(Area Under the Curve)是 ROC 曲线下的面积,表示模型区分正负样本的能力:

  • AUC = 1.0 表示完美分类器
  • AUC = 0.5 表示随机猜测
  • AUC < 0.5 说明模型预测反了

3. How?(伪代码 & 示例可视化)

伪代码

1
2
3
4
5
6
7
8
python复制编辑输入: y_true(二分类真实标签), y_scores(模型预测的概率分数)
1. 初始化 FPR 和 TPR 列表
2. 遍历不同阈值,从高到低计算:
- 计算 TPR 和 FPR
- 记录 (FPR, TPR) 坐标点
3. 绘制 ROC 曲线
4. 计算 AUC 评分
输出: ROC 曲线 + AUC 值

Python 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc

# 生成模拟数据(假设我们有10个样本的真实标签和预测概率)
y_true = np.array([0, 0, 1, 1, 1, 0, 1, 0, 1, 0]) # 真实标签
y_scores = np.array([0.1, 0.4, 0.35, 0.8, 0.93, 0.2, 0.85, 0.5, 0.7, 0.3]) # 预测概率

# 计算 ROC 曲线
fpr, tpr, _ = roc_curve(y_true, y_scores)
roc_auc = auc(fpr, tpr) # 计算 AUC 值

# 绘制 ROC 曲线
plt.figure(figsize=(6,6))
plt.plot(fpr, tpr, color='blue', lw=2, label=f'ROC curve (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='grey', linestyle='--') # 随机猜测的对角线
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

4. When?(适用范围与局限性)

适用场景

  • 二分类问题
  • 不平衡数据集(相较于准确率,ROC 曲线不受类别分布影响)
  • 评估不同模型的分类能力
  • 选择最优决策阈值

局限性

  1. 不适用于多分类问题
    • ROC 主要用于二分类。对于多分类问题,通常使用One-vs-Rest(OvR)策略绘制多个 ROC 曲线。
  2. 不适用于极端类别不均衡数据
    • 如果正例远少于负例,FPR 可能较低,但模型仍然可能不准确。此时 PR(Precision-Recall)曲线更有用。
  3. 不能直接衡量模型的实际决策效果
    • ROC 仅展示模型的区分能力,但实际应用时,特定阈值的选择更重要,可能需要结合 Precision-Recall 曲线分析。

总结

方面 内容
Why?(为什么) 评估二分类模型,选择最佳阈值,计算 AUC 衡量性能
What?(定义) TPR vs. FPR 曲线,衡量不同阈值下的模型表现
How?(如何绘制) 计算 FPR/TPR,绘制 ROC 曲线,计算 AUC
When?(适用性) 适用于二分类,可能不适用于极端不平衡数据

结论:ROC 曲线是一种强大的可视化工具,帮助我们理解二分类模型的整体性能。通过 AUC 评分,我们可以比较不同模型的区分能力。然而,在某些情况下(如类别极端不平衡),PR 曲线和MCC可能是更好的评估方法。

自己的理解

二分类模型会因为数据的分布不均匀导致不准确,阈值的选择也会改变准确率的影响问题。AUC的面积计算非常有意思,如果面积是1说明完全预测正确,面积为0.5说明没学会,面积为0说明完全学反了。

在我自己的项目中,对于点云的占用场二分类,也可以用ROC来代替简单的ACC准确率。