libsvm中ROC曲线的绘制plotSVMroc

转自http://www.360doc.com/content/11/0729/09/2617151_136463978.shtml

libsvm中ROC曲线的绘制plotSVMroc

plotSVMroc(true_labels,predict_labels,classnumber)

有朋友问如何用matlab绘制lisvm结果的ROC曲线,遂熬夜稍微弄了一下。
主体就是用matlab自带的plotroc实现的。就是前面加进了一些预处理。

可以绘制任何类别数目的数据的ROC,数据的类别标签可以任意。(不一定非得是 +1 和 -1 )

lssvm中有可以绘制ROC曲线的函数,但类别的标签只能是 - 1 和 +1


程序很简单。但前面的预处理挺有意思。以及后面与plotroc结合的地方我煞费了一点心思(最后是用eval实现的)。O(∩_∩)O

====那个朋友的发问题的帖子
如何利用LIBSVM-MAT画ROC曲线?
http://www.ilovematlab.cn/thread-62962-1-1.html

====

什么是ROC曲线? 不知道。。。!??
明白的自然明白。不明白的百度去。。我就不说了。睡觉先。明天还得自习
期末复习ing。。。。



测试图

测试 1 hearscale 数据 两类 类别标签 -1 + 1


1.jpg




2.jpg


==============

测试2 wine 数据 三类 类别标签 1 2 3



3.jpg




4.jpg




代码:
===============plotSVMroc(true_labels,predict_labels,classnumber)=======

CODE:

function plotSVMroc(true_labels,predict_labels,classnumber)
% plotSVMroc
% by faruto
% Email:farutoliyang@gmail.com
% 2010.01.11
%%
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 = zeros(classnumber,len);
for class = 1:classnumber
    for run = 1:len
        if true_labels(run) == label(class)
            targets_true(class,run) = 1;
        end
        if predict_labels(run) == label(class)
            outputs_predict(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);
===========测试代码

CODE:

%% plotSVMroc_test
%%
clear;
clc;
%%
load wine_test
%%
[train_data,test_data] = scaleForSVM(train_data,test_data,0,1); 
model = svmtrain(train_data_labels,train_data);
[pre,acc] = svmpredict(test_data_labels,test_data,model);
%% plotSVMroc
plotSVMroc(test_data_labels,pre,3)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值