ROC曲线(Receiver Operating Characteristic,又称为受试者工作特征曲线)和PR曲线(Precision-Recall Curve)是机器学习中常用的评估模型性能的工具。
ROC曲线是利用分类模型在不同阈值下的真阳性率(True Positive Rate,TPR)和假阳性率(False Positive Rate,FPR)绘制的曲线。其中TPR是分类器正确分类为阳性的样本数除以真实阳性样本总数,而FPR是分类器错误分类为阳性的样本数除以真实阴性样本总数。ROC曲线的横轴是FPR,纵轴是TPR。该曲线可以直观地反映模型在不同阈值下的分类能力。一般来说,ROC曲线越靠近左上角,模型性能越好。
PR曲线是利用分类模型在不同阈值下的精确率(Precision)和召回率(Recall)绘制的曲线。精确率是分类器正确分类为阳性的样本数除以模型预测为阳性的样本总数,而召回率是分类器正确分类为阳性的样本数除以真实阳性样本总数。PR曲线的横轴是召回率,纵轴是精确率。该曲线可以用来衡量模型在保持高精确率的同时能够发现多少真实阳性样本。通常来说,PR曲线越靠近右上角,模型性能越好。
ROC曲线和PR曲线可以帮助我们在不同的性能指标(如准确率、召回率)之间进行权衡和选择合适的分类模型。
当使用Python进行分类模型评估时,可以使用scikit-learn
库来计算和绘制ROC曲线和PR曲线。下面是一个关于如何绘制这两种曲线的示例代码:
import numpy as np import matplotlib.pyplot as plt from sklearn import metrics # 构造样本真实标签和预测标签 y_true = np.array([0, 0, 1, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8, 0.6]) # 计算FPR、TPR和阈值 fpr, tpr, thresholds = metrics.roc_curve(y_true, y_scores) precision, recall, thresholds = metrics.precision_recall_curve(y_true, y_scores) # 计算AUC值 roc_auc = metrics.auc(fpr, tpr) pr_auc = metrics.auc(recall, precision) # 绘制ROC曲线 plt.figure() plt.plot(fpr, tpr, color='darkorange', label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', 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') plt.legend(loc="lower right") plt.show() # 绘制PR曲线 plt.figure() plt.step(recall, precision, color='b', alpha=0.2, where='post') plt.fill_between(recall, precision, alpha=0.2, color='b', step='post') plt.xlabel('Recall') plt.ylabel('Precision') plt.ylim([0.0, 1.05]) plt.xlim([0.0, 1.0]) plt.title('Precision-Recall curve: AP={0:0.2f}'.format(pr_auc)) plt.show()
效果图:
在上面的代码中,首先构造了一个示例的真实标签y_true
和预测标签y_scores
。然后使用metrics.roc_curve
和metrics.precision_recall_curve
函数计算了FPR、TPR、精确率和召回率。接着使用metrics.auc
函数计算ROC曲线和PR曲线的AUC值。最后通过matplotlib.pyplot
库绘制了ROC曲线和PR曲线。