2014-11-15 2 views
0

Я должен, например, измерить результаты для детектора лица и найти в таких статьях, как Viola-Jones, которые наиболее часто используются для этой меры, является кривой ROC. Но я не могу найти способ построить кривую ROC на GNU/Linux, только в MATLAB, но, очевидно, я не буду покупать ее, чтобы использовать только функцию plotroc.Графики кривых ROC для результатов альт-Джонса

Я искал его на OCTAVE, но не смог найти его ... Есть ли способ построить одну кривую ROC? Например, используя Python ...?

Я бы хотел, например, измерить истинные положительные значения против ложных срабатываний.

+0

Или R? http://www.r-project.org/ – NPE

+0

Вы пробовали поисковый запрос «roc python». Получается целая куча релевантных результатов. – NPE

+0

Спасибо за ур ответ! Никогда не пробовали R ... Есть ли какой-либо пакет, который имеет методы для генерации и построения кривой ROC? –

ответ

0

Надеется, что это помогает, это участкам ROC кривых с использованием данных о лицах, не являющиеся данных лица

function thresh = ComputeROC(Cparams, Fdata, NFdata) 
%function ComputeROC compute the ROC curve 

    face_fnames = dir(Fdata.dirname); 
    full_face = 3:length(face_fnames); 
    test_face = setdiff(full_face, Fdata.fnums); 
    num_tf = size(test_face,2); 

    nface_fnames = dir(NFdata.dirname); 
    full_nface = 3:length(nface_fnames); 
    test_nface = setdiff(full_nface, NFdata.fnums); 
    num_tnf = size(test_nface,2); 

    scores = zeros(num_tf+num_tnf, 2); 

    for ii = 1:num_tf 
     im_fname = [Fdata.dirname, '/', face_fnames(test_face(ii)).name]; 
     [~, ii_im] = LoadIm(im_fname); 
     sc = ApplyDetector(Cparams, ii_im); 
     scores(ii,1) = sc; 
     scores(ii,2) = 1; 
    end 

    for ii = 1:num_tnf 
     im_fname = [NFdata.dirname, '/', nface_fnames(test_nface(ii)).name]; 
     [~, ii_im] = LoadIm(im_fname); 
     sc = ApplyDetector(Cparams, ii_im); 
     scores(ii+num_tf,1) = sc; 
     scores(ii+num_tf,2) = 0; 
    end 

    thresh = 0; 

    threshold = 0:0.01:max(scores(:,1)); 
    fpr = zeros(size(threshold)); 
    tpr = zeros(size(threshold)); 

    for tt=1:length(threshold) 
     ntp = 0; nfp = 0; ntn = 0; nfn = 0; 
     predicted_class = scores(:, 1) >= threshold(tt); 
     for ii=1:size(predicted_class, 1) 
      if predicted_class(ii) == 1 && scores(ii, 2) == 1 
       ntp = ntp+1; 
      elseif predicted_class(ii) == 0 && scores(ii, 2) == 0 
       ntn = ntn+1; 
      elseif predicted_class(ii) == 1 && scores(ii, 2) == 0 
       nfp = nfp+1; 
      elseif predicted_class(ii) == 0 && scores(ii, 2) == 1 
       nfn = nfn+1; 
      end 
     end 

     fpr(tt) = nfp/double(ntn+nfp); 
     tpr(tt) = ntp/double(ntp+nfn); 

     if tpr(tt) > 0.7 
      thresh = threshold(tt); 
     end 
    end 

    figure; plot(fpr, tpr, 'r-'); 

end 
Смежные вопросы