模式识别分类器评价指标之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 Score
        s_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;
               else
                   s_fp(1,cont_i) = mean(match_dist(i,ind));
                   cont_i=cont_i+1;
               end
           end
        end

	resolu=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:dmaxx
    num_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:dmaxx
    num_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;
        end
    end
end














参考:

1. 模式识别分类器评价指标之CMC曲线

2. 分类器模型评价指标之ROC曲线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值