ROC曲线和libsvm

时间:2014-05-30 14:07:42

标签: matlab classification svm libsvm roc

给定使用plotroc.m绘制的ROC曲线(请参阅here):

  1. 理论问题:如何选择最佳使用阈值?
  2. 编程问题:如何诱导libsvm分类器使用所选(最佳)阈值?

1 个答案:

答案 0 :(得分:2)

ROC曲线是通过绘制y轴上的真阳性分数与x轴上的假阳性分数绘制而生成的图。因此,ROC曲线上任何点(x,y)的坐标表示特定阈值处的FPR和TPR值。 如图所示,我们在ROC曲线上找到了点(x,y),它对应于该点与图的左上角(即由(0,1)给出)的最小距离。对应于该点的阈值是所需的阈值。对不起,我不允许放任何图像,所以无法用图解释。但是,有关此次点击的更多详情,请点击ROC related help

其次,在libsvm中,svmpredict函数返回属于特定类的数据样本的概率。因此,如果该概率(对于正类)大于阈值(从ROC图获得),那么我们可以将样本分类为正类。这几行可能对您有用:

    [pred_labels,~,p] = svmpredict(target_labels,feature_test,svmStruct,'-b 1');

%其中,svmStruct是svmtrain函数返回的结构。

    op = p(:,svmStruct.Label==1);  % This gives probability for positive
% class (i.e whose label is 1 )

现在,如果此变量'op'大于阈值,那么我们可以将相应的测试样本分类为正类。这可以作为

完成

op_labels = op> th; %,其中'th'是从ROC获得的阈值