ROC曲线计算过程例子

三个类别:

SampleTruePredict
1[0 0 1][0.1 0.2 0.7]
2[0 1 0][0.1 0.6 0.3]
3[1 0 0][0.5 0.2 0.3]
4[0 0 1][0.1 0.1 0.8]
5[1 0 0][0.4 0.2 0.4]
6[0 1 0][0.6 0.3 0.1]
7[0 1 0][0.4 0.2 0.4]
8[0 1 0][0.4 0.1 0.5]
9[0 0 1][0.1 0.1 0.8]
10[0 1 0][0.1 0.8 0.1]

ROC曲线一般是针对二分类问题的,那对于多分类问题ROC曲线该怎么绘制?

也是One vs. Rest原则,将其中一类看做正例,其它看做负例。比如我们有三个类别,那我们就可以绘制3条ROC曲线。

以第一个类别为例,将类别一看做正例,其它看做负例,得到下面的表:

SampleTrueScore
1n0.1
2n0.1
3p0.5
4n0.1
5p0.4
6n0.6
7n0.4
8n0.4
9n0.1
10n0.1

按Score从小到大排序,得到:

SampleTrueScore
6n0.6
3p0.5
5p0.4
7n0.4
8n0.4
1n0.1
2n0.1
4n0.1
9n0.1
10n0.1

得到TPR和FPR:

SampleTrueScoreTPRFPR
6n0.60/20/8
3p0.51/21/8
5p0.42/23/8
7n0.4
8n0.4
1n0.12/28/8
2n0.1
4n0.1
9n0.1
10n0.1

以FPR为横坐标,TPR为纵坐标,就可以绘制ROC曲线。

我们用Scikit-Learn进行FPR和TPR的计算,并用Matplotlib绘制ROC曲线如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import metrics

y_true = np.array([[0, 0, 1],
                   [0, 1, 0],
                   [1, 0, 0],
                   [0, 0, 1],
                   [1, 0, 0],
                   [0, 1, 0],
                   [0, 1, 0],
                   [0, 1, 0],
                   [0, 0, 1],
                   [0, 1, 0]])

y_predict = np.array([[0.1, 0.2, 0.7],
                      [0.1, 0.6, 0.3],
                      [0.5, 0.2, 0.3],
                      [0.1, 0.1, 0.8],
                      [0.4, 0.2, 0.4],
                      [0.6, 0.3, 0.1],
                      [0.4, 0.2, 0.4],
                      [0.4, 0.1, 0.5],
                      [0.1, 0.1, 0.8],
                      [0.1, 0.8, 0.1]])

fpr, tpr, _ = metrics.roc_curve(y_true[:, 0], y_predict[:, 0])

print(fpr)
print(tpr)

plt.plot(fpr, tpr, marker='x', clip_on=False, )
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.show()
Out:
[0.  0.125 0.125 0.375 1. ]
[0.  0.    0.5   1.    1. ]

这里写图片描述

在Scikit-learn库中,你可以使用`plot_roc_curve`函数来绘制多个模型的ROC曲线,并通过`roc_auc_score`函数计算每个模型的AUC(Area Under the Curve)。以下是一个基本步骤: 1. 首先,你需要对数据集进行训练和预测,得到每个模型的混淆矩阵或概率预测结果。 2. 然后,使用`sklearn.metrics.roc_curve`函数生成每个模型的真正率(True Positive Rate,TPR)和假正率(False Positive Rate,FPR)值。这个函数需要两个输入:实际标签数组和预测概率数组。 ```python from sklearn.metrics import roc_curve, roc_auc_score y_true = ... # 实际的二分类标签 probas_pred = [model.predict_proba(X_test)[:, 1] for model in models] # 模型的预测概率数组 ``` 3. 对于每个模型,调用`roc_curve`得到FPR、TPR和阈值的三元组列表。 4. 使用matplotlib或其他绘图库绘制每个模型的ROC曲线。这里是一个简单的例子: ```python import matplotlib.pyplot as plt fpr = dict() tpr = dict() roc_auc = dict() for i, (y_probas, label) in enumerate(zip(probas_pred, model_names)): fpr[i], tpr[i], _ = roc_curve(y_true, y_probas) roc_auc[i] = roc_auc_score(y_true, y_probas) # 绘制所有模型的ROC曲线 for i, color in zip(range(len(model_names)), colors): plt.plot(fpr[i], tpr[i], lw=2, alpha=0.8, label=f'{label} (AUC = {roc_auc[i]:0.2f})') ``` 5. 最后,添加标题、图例和轴标签,然后显示或保存图像: ```python plt.plot([0, 1], [0, 1], 'k--', lw=2) 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)') plt.legend(loc="lower right") plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手撕机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值