本文主要是介绍模式识别分类器评价指标之ROC曲线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ROC(Receiver Operating Characteristic Curve)接收器操作特性曲线,原先主要用于评价雷达中的漏报虚警等事件的指标,其中漏报表示雷达监控的空域中有敌机出现,而雷达没能检测出来;虚警则表示雷达监控的空域中没有敌机出现,而雷达却发出警报。后来ROC曲线又用在了医学分类指标中,主要是二分类,即有病/没病,后逐渐扩展到模式识别的多分类中,用来评价分类器的好坏。在ROC曲线中,横纵坐标可以取不同的变量,如FPR 和FNR或FPR和TPR等,也就是说ROC曲线可以表现为不同的形式。另外,ROC曲线的横纵坐标的text(xlabel,ylabel)亦有不同的取名,有的是根据现在ROC曲线的定义标注的,有的是根据以前雷达系统中漏报虚警等意思标注的,本文习惯于采用雷达系统中的意思进行标注。下面是具体的Matlab实现代码。
ROC曲线Matlab实现代码:
现设match_dist=NxM的矩阵,其中N为测试样本(test set)数,M为训练样本(training set)数,根据某种相似度匹配规则,如距离或概率或score等,得到的一个匹配矩阵match_dist,参考。
%确定训练集与测试集样本数[num_class, ind, dummy] = unique(num_train);num_test = sum(sum(test_train_id(:,ind)));num_impostor = sum(sum(1-test_train_id(:,ind)));%初始化用来存储 True Positive Score 与 False Positive Scores_tp = zeros(1,num_test);s_fp = zeros(1,num_impostor);cont_c = 1;cont_i = 1;for j=1:length(num_class) [dum,ind] = find(num_class(j)==num_train);for i=1:length(vertical_ids)if vertical_ids(i)==num_class(j)s_tp(1,cont_c) = mean(match_dist(i,ind));cont_c=cont_c+1;elses_fp(1,cont_i) = mean(match_dist(i,ind));cont_i=cont_i+1;endendendresolu=5000; %分辨率
test_scor = numel(s_tp);
impostor_scor = numel(s_fp);dmax = s_tp;
dmin = s_fp;%% 获取 ROC 曲线数据(即横纵坐标)dminx = min(s_tp);
dmaxx = max(s_fp);%根据阈值计算 False Reject Rate
delta = (dmaxx-dminx)/resolu;
counter=1;
fre = zeros(1,resolu);
for trash=dminx:delta:dmaxxnum_ok = sum(dmax<trash);frr(1,counter) = 1-(num_ok/test_scor);counter = counter+1;
end%根据阈值计算 False Accept Rate
counter=1;
fae = zeros(1,resolu);
for trash=dminx:delta:dmaxxnum_ok = sum(dmin<trash);far(1,counter) = (num_ok/impostor_scor);counter = counter+1;
end
其中,test_train_id实现如下:
train_ids=num_train; %训练集样本labels
test_ids=num_test; %测试集样本labels
test_train_id=zeros(length(test_ids),length(train_ids));
for i=1:length(test_ids)for j=1:length(train_ids)if test_ids(i)==train_ids(j)test_train_id(i,j)=1;endend
end
参考:
1. 模式识别分类器评价指标之CMC曲线
2. 分类器模型评价指标之ROC曲线
这篇关于模式识别分类器评价指标之ROC曲线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!