用python画多分类AUC图
时间: 2023-07-12 22:51:04 浏览: 97
利用Python画ROC曲线和AUC值计算
好的,以下是用Python绘制多分类AUC图的示例代码:
```python
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from itertools import cycle
import numpy as np
# 假设有真实标签y_true和预测概率y_score
y_true = np.array([0, 1, 2, 0, 1, 2])
y_score = np.array([[0.9, 0.1, 0.0],
[0.1, 0.8, 0.1],
[0.2, 0.3, 0.5],
[0.8, 0.1, 0.1],
[0.2, 0.7, 0.1],
[0.1, 0.2, 0.7]])
# 计算每个类别的ROC曲线和AUC值
fpr = dict()
tpr = dict()
roc_auc = dict()
n_classes = y_score.shape[1]
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_true == i, y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# 计算micro-average ROC曲线和AUC值
fpr["micro"], tpr["micro"], _ = roc_curve(y_true.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
# 绘制ROC曲线和AUC值
plt.figure()
lw = 2
plt.plot(fpr["micro"], tpr["micro"], color='deeppink', lw=lw, label='micro-average ROC curve (area = {0:0.2f})'
''.format(roc_auc["micro"]))
colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])
for i, color in zip(range(n_classes), colors):
plt.plot(fpr[i], tpr[i], color=color, lw=lw,
label='ROC curve of class {0} (area = {1:0.2f})'
''.format(i, roc_auc[i]))
plt.plot([0, 1], [0, 1], 'k--', lw=lw)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Multi-class Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()
```
在这个示例中,我们假设有一个3分类问题,其中6个样本中有2个标签为0、2个标签为1和2个标签为2,预测概率矩阵为6x3。我们使用sklearn库中的roc_curve和auc函数计算每个类别的ROC曲线和AUC值,并使用matplotlib库绘制所有类别的ROC曲线和AUC值,同时计算micro-average ROC曲线和AUC值。
阅读全文