ROC and AUC

本文转自:http://yygreat.blog.sohu.com/148716030.html,谢谢博主~~

首先感谢ilovematlab论坛的帮助,也谢谢版主faruto,没有他们的帮助我也不会matlab上手这么快,真诚的谢谢你们!

    

    load heart_scale.mat

%把标签设为1,0,方便后续处理
% heart_scale_label(heart_scale_label>0) = 1;
% heart_scale_label(heart_scale_label<0) = 0;
%训练与预测,一定加上参数'-b 1', 用于估计概率输出,而不是估计标签。因为
%plotroc函数的输入参数必须为估计概率
model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07 -b 1');
[predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst,model,'-b 1');
%调整,至于为什么调整,参见plotroc的参数说明
heart_scale_label = [heart_scale_label, 1 - heart_scale_label];
%画ROC,注意参数的维数,(求转置)
% plotroc(heart_scale_label',dec_values');
plotSVMroc(heart_scale_label,dec_values);
==========pplotSVMroc.m code
复制内容到剪贴板
代码:
function plotSVMroc(true_labels,dec_values,classnumber)
% plotSVMroc
% by faruto
% Email:farutoliyang@gmail.com
% 2010.01.11
%%
if nargin == 2
    classnumber = 2;
end
%%
len = length(true_labels);
label = zeros(1,classnumber);
label(1) = true_labels(1);
currentindex = 1;
for run = 2:len
    flag = 0;
    for class = 1:currentindex
        if true_labels(run) == label(class)  
            flag = 1;
        end
    end
    if flag == 1
        continue;
    else        
        label(currentindex+1) = true_labels(run);
        currentindex = currentindex + 1;
    end
end
%%
targets_true = zeros(classnumber,len);
outputs_predict = dec_values';
for class = 1:classnumber
    for run = 1:len
        if true_labels(run) == label(class)
            targets_true(class,run) = 1;
        end
    end
end
%% plot ROC curve
plotroc(targets_true,outputs_predict);
grid on;
%% plot ROC curve subplot
str = ['plotroc('];
for class = 1:classnumber
    
    str_temp = ['targets_true(',num2str(class),...
        ',:),','outputs_predict(',num2str(class),',:),',...
        '''class ','',num2str(class),'(label:',...
        num2str(label(class)),')''',','];
    
    str = [str str_temp];
    
end
str = str(1:end-1);
str = [str ')'];
eval(str);

============================================================
求解AUC
用这个可以直接得出AUC

[X,Y,THRE,AUC,OPTROCPT,SUBY,SUBYNAMES] = ...
perfcurve(heart_scale_label,dec_values(:,1),'1');
AUC

Accuracy = 86.2963% (233/270) (classification)
AUC =
    0.9304

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值