ROC曲线原理及绘制

ROC曲线(Receiver Operating Characteristic Curve)是一种用于评价二分类模型性能的图形工具。它展示了模型在不同阈值下的分类性能,通过绘制假阳性率(FPR)和真阳性率(TPR)之间的关系来表现。

1.混淆矩阵

混淆矩阵是对预测正例样本的进一步分析,而准确率是综合了正例与反例的比例.

预测值 预测值
正例 (positive) 假例 (negtive)
真实正例 真正例TP 伪反例FN TPR=TP/真实正例
真实假例 伪正例 FP 真反例TN FPR=FP/真实假例

2.ROC曲线的含义

ROC曲线(Receiver Operating Characteristic Curve)是一种用于评价二分类模型性能的图形工具。它展示了模型在不同阈值下的分类性能,通过绘制假阳性率(FPR)和真阳性率(TPR)之间的关系来表现。

  • 真阳性率(TPR, True Positive Rate):也称为灵敏度(sensitivity)或召回率(recall),表示真正被分类为正类的比例。公式为: \[ \text{TPR} = \frac{\text{TP}}{\text{TP} + \text{FN}} \]

  • 假阳性率(FPR, False Positive Rate):表示被错误分类为正类的负类样本比例。公式为: \[ \text{FPR} = \frac{\text{FP}}{\text{FP} + \text{TN}} \]

3.ROC曲线的绘制步骤

  1. 计算预测概率:使用二分类模型对数据进行预测,得到每个样本属于正类的概率。
  2. 确定阈值:从0到1选择一系列阈值,对每个阈值进行如下操作:
    • 将预测概率与当前阈值比较,得到分类结果(大于等于阈值为正类,小于阈值为负类)。
    • 计算对应的TPR和FPR。
  3. 绘制曲线:以FPR为横坐标,TPR为纵坐标,绘制曲线。

4.实例说明

假设有一个简单的二分类问题,以下是一些预测结果及对应的实际标签:

实际标签 预测概率
1 0.9
0 0.8
1 0.7
1 0.6
0 0.4
1 0.3
0 0.2
0 0.1

我们使用这些数据来绘制ROC曲线。

步骤1:计算TPR和FPR

我们选择几个阈值来计算TPR和FPR:

  • 阈值 = 0.9
  • 阈值 = 0.7
  • 阈值 = 0.5
  • 阈值 = 0.3
  • 阈值 = 0.1

对于每个阈值,计算TPR和FPR:

  1. 阈值 = 0.9:

    • 预测结果:1 0 0 0 0 0 0 0
    • TPR = 1/4 = 0.25
    • FPR = 0/4 = 0
  2. 阈值 = 0.7:

    • 预测结果:1 1 1 0 0 0 0 0
    • TPR = 2/4 = 0.5
    • FPR = 1/4 = 0.25
  3. 阈值 = 0.4:

    • 预测结果:1 1 1 1 1 0 0 0
    • TPR = 3/4 = 0.75
    • FPR = 2/4 = 0.5
  4. 阈值 = 0.3:

    • 预测结果:1 1 1 1 1 1 0 0
    • TPR = 4/4 = 1
    • FPR = 2/4 = 0.5
  5. 阈值 = 0.2:

    • 预测结果:1 1 1 1 1 1 1 0
    • TPR = 4/4 = 1
    • FPR = 3/4 = 0.75

5.python绘制曲线

我们将这些TPR和FPR值在图上绘制出来,得到ROC曲线。

下面用Python代码实现绘制ROC曲线:

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

# 实际标签
y_true = [1, 0, 1, 0, 1, 0, 1, 0]

# 预测概率
y_scores = [0.9, 0.8, 0.7, 0.4, 0.6, 0.2, 0.3, 0.1]

# 计算FPR和TPR
fpr, tpr, thresholds = roc_curve(y_true, y_scores)

# 绘制ROC曲线
plt.figure()
plt.plot(fpr, tpr, marker='o')
plt.plot([0, 1], [0, 1], linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.show()

这段代码将绘制出对应的数据的ROC曲线。ROC曲线越靠近左上角,表示模型性能越好。曲线下面积(AUC, Area Under the Curve)可以用来量化模型的整体性能,AUC值越大表示模型性能越好。


ROC曲线原理及绘制
https://linxkon.github.io/ROC曲线绘制.html
作者
linxkon
发布于
2021年2月11日
许可协议