python绘制多分类roc曲线
时间: 2023-09-29 09:11:28 浏览: 155
在Python中绘制多分类的ROC曲线可以使用scikit-learn库来实现。下面是一个示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
from sklearn.preprocessing import label_binarize
from scipy import interp
# 假设你已经有了实际标签和预测概率
y_test = np.array([0, 1, 2, 2, 1, 0])
y_score = np.array([[0.2, 0.3, 0.5],
[0.1, 0.7, 0.2],
[0.3, 0.2, 0.5],
[0.1, 0.4, 0.5],
[0.3, 0.1, 0.6],
[0.8, 0.1, 0.1]])
# 将标签转换为二进制形式
n_classes = 3
y_test_bin = label_binarize(y_test, classes=[0, 1, 2])
# 计算每个类别的ROC曲线和AUC值
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test_bin[:, i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# 计算微平均ROC曲线和AUC值
fpr["micro"], tpr["micro"], _ = roc_curve(y_test_bin.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
# 计算宏平均ROC曲线和AUC值
all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))
mean_tpr = np.zeros_like(all_fpr)
for i in range(n_classes):
mean_tpr += interp(all_fpr, fpr[i], tpr[i])
mean_tpr /= n_classes
fpr["macro"] = all_fpr
tpr["macro"] = mean_tpr
roc_auc["macro"] = auc(fpr["macro"], tpr["macro"])
# 绘制每个类别的ROC曲线
plt.figure()
colors = ['blue', 'red', 'green']
for i, color in zip(range(n_classes), colors):
plt.plot(fpr[i], tpr[i], color=color, lw=2,
label='ROC curve of class {0} (AUC = {1:0.2f})'
''.format(i, roc_auc[i]))
# 绘制微平均和宏平均ROC曲线
plt.plot(fpr["micro"], tpr["micro"],
label='micro-average ROC curve (AUC = {0:0.2f})'
''.format(roc_auc["micro"]),
color='deeppink', linestyle=':', linewidth=4)
plt.plot(fpr["macro"], tpr["macro"],
label='macro-average ROC curve (AUC = {0:0.2f})'
''.format(roc_auc["macro"]),
color='navy', linestyle=':', linewidth=4)
# 添加完整性
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('Multi-class ROC Curve')
plt.legend(loc="lower right")
plt.show()
```
上述代码假设你已经有了实际标签 `y_test` 和预测概率 `y_score`。你需要将实际标签转换为二进制形式,并使用 `roc_curve` 函数计算每个类别的ROC曲线和AUC值。然后,你可以计算微平均和宏平均的ROC曲线和AUC值,并使用matplotlib库绘制多分类的ROC曲线。
希望这可以帮助到你!如果你还有其他问题,请随时提问。
阅读全文