ROC曲线(Receiver Operating Characteristic Curve)
1 简介
ROC曲线是用于评估二元分类模型(如Logistic回归)表现优劣的一种工具,其横轴表示假阳性率(false positive rate,FPR),即实际为负例但被模型预测为正例的样本占总负例样本数的比例;纵轴表示真阳性率(true positive rate,TPR),即实际为正例且被模型预测为正例的样本占总正例样本数的比例。ROC曲线的绘制方式是在不同的阈值下计算并绘制出TPR-FPR的曲线。
一般来说,ROC曲线越接近左上角,则模型性能越好。同时,ROC曲线下的面积(Area Under Curve, AUC)也可以用于衡量模型分类的性能,AUC越大说明模型分类性能越好。如果AUC为0.5,则说明模型的分类性能与随机猜测无异。
2 MATLAB代码实现
2.1 函数
在MATLAB中,可以使用perfcurve函数绘制ROC曲线。
语法:
[X,Y,T,AUC] = perfcurve(labels,scores,posclass)
具体详细解释见MATLAB中文帮助-perfcurve函
2022版MATLAB引入 rocmetrics函数,用于评估ROC性能
语法:
rocObj = rocmetrics(Labels,Scores,ClassNames)
rocObj = rocmetrics(Labels,Scores,ClassNames,Name=Value)
具体详细解释见MATLAB中文帮助-rocmetrics函
2.2 案例
下面是一个示例代码:
clc
close all
clear
%%
pathFigure= '.\Figures\' ;
load fisheriris
X = meas(51:end,3:4);
Y = (strcmp('versicolor',species(51:end)));
[B,dev,stats] = glmfit(X,Y,'binomial');
scores = glmval(B,X,'logit');
[X,Y,T,AUC] = perfcurve(Y,scores,true);
figure(1)
h(1) = plot(X,Y,'linewidth',1.5);
xlabel('False positive rate')
ylabel('True positive rate')
title('ROC Curve')
set(gca,'FontSize',12,'Fontname', 'Times New Roman');
成图如下:
参考
1.论文-J2010-Receiver Operating Characteristic Curve in Diagnostic Test Assessment
2.论文-J2017-Comparing threshold definition techniques for rainfall-induced landslides: A national assessment using radar rainfall