2014-11-15 8 views
0

예를 들어 얼굴 검출기에 대한 내 결과를 측정해야하며이 측정에 가장 많이 사용되는 통계 곡선이 ROC 곡선 인 Viola-Jones와 같은 기사에 나와 있습니다. 그러나 MATLAB에서만 GNU/Linux에서 ROC 곡선을 그릴 수있는 방법을 찾을 수는 없지만 분명히 plotroc 함수를 사용하기 위해이 함수를 사지는 않습니다.비올라 존스 결과에 대한 ROC 커브 플로팅

OCTAVE에서 검색했지만 찾을 수 없습니다 ... 하나의 ROC 곡선을 그릴 수있는 방법이 있습니까? 예를 들어 파이썬을 사용하는 것처럼 ...?

예를 들어, 거짓 긍정에 대한 진정한 긍정을 측정하고 싶습니다.

+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