python绘制多分类的ROC曲线
时间: 2023-08-30 07:09:20 浏览: 106
要绘制多分类的ROC曲线,可以使用micro-averaging或macro-averaging方法来计算ROC曲线。下面是一个使用micro-averaging方法绘制多分类的ROC曲线的示例代码:
```python
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import numpy as np
# y_true是真实标签,y_score是预测概率
y_true = np.array([0, 1, 2, 3, 4])
y_score = np.array([[0.9, 0.05, 0.03, 0.01, 0.01],
[0.05, 0.9, 0.02, 0.02, 0.01],
[0.02, 0.02, 0.9, 0.03, 0.03],
[0.01, 0.01, 0.03, 0.9, 0.05],
[0.01, 0.01, 0.03, 0.05, 0.9]])
# 将多分类问题转化为二分类问题,计算ROC曲线
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(len(y_true)):
fpr[i], tpr[i], _ = roc_curve((y_true == i).astype(int), y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# micro-averaging
fpr["micro"], tpr["micro"], _ = roc_curve(y_true.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
# 绘制ROC曲线
plt.figure()
lw = 2
plt.plot(fpr["micro"], tpr["micro"], color='deeppink', lw=lw, label='micro-average ROC curve (area = %0.2f)' % roc_auc["micro"])
for i in range(len(y_true)):
plt.plot(fpr[i], tpr[i], lw=lw, label='ROC curve of class %d (area = %0.2f)' % (i, roc_auc[i]))
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
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 for multi-class')
plt.legend(loc="lower right")
plt.show()
```
在这个示例中,我们使用了sklearn.metrics库中的roc_curve和auc函数计算ROC曲线,并使用matplotlib库绘制ROC曲线。注意,我们需要将多分类问题转化为二分类问题来计算ROC曲线,因此需要对每个类别计算一组FPR和TPR,同时也需要计算micro-averaging的FPR和TPR。
阅读全文