【问题标题】:Plotting ROC curves for viola-jones results绘制 viola-jones 结果的 ROC 曲线
【发布时间】:2015-01-13 01:42:35
【问题描述】:

例如,我必须测量面部检测器的结果,并且在 Viola-Jones 等文章中发现,用于此测量的最常用的统计曲线是 ROC 曲线。但是我找不到任何方法在 GNU/Linux 上绘制 ROC 曲线,只能在 MATLAB 中,但显然我不会购买它来仅使用 plotroc 函数。

我在 OCTAVE 上搜索了它,但找不到它……有没有办法绘制一条 ROC 曲线?比如使用 Python...?

例如,我想衡量真阳性和假阳性。

【问题讨论】:

  • 还是R? r-project.org
  • 你试过谷歌搜索“roc python”。它出现了一大堆相关的结果。
  • 感谢您的回答!从未尝试过 R... 是否有任何包具有生成和绘制 ROC 曲线的方法?
  • 我看到了一个使用matplotlib的方法,但是不清楚如何组织矩阵来绘制它...

标签: python plot statistics roc viola-jones


【解决方案1】:

希望这有帮助,它使用人脸数据绘制 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

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 2016-02-04
    • 2019-02-27
    • 2021-03-03
    • 2020-11-07
    • 2013-08-10
    • 2012-01-01
    • 2017-09-11
    相关资源
    最近更新 更多