plotroc.m
给定一个用(见这里)绘制的 ROC 曲线:
- 理论问题:如何选择要使用的最佳阈值?
- 编程问题:如何诱导
libsvm
分类器使用选定的(最佳)阈值?
ROC 曲线是通过在 y 轴上绘制真阳性分数与在 x 轴上绘制假阳性分数而生成的。因此,ROC 曲线上任意点 (x,y) 的坐标表示特定阈值下的 FPR 和 TPR 值。如图所示,我们在 ROC 曲线上找到点 (x,y),它对应于该点到绘图左上角的最小距离(即由 (0,1) 给出)。该点对应的阈值即为所需阈值。对不起,我不允许放任何图像,所以无法用图解释。但是,有关此的更多详细信息,请单击ROC 相关帮助
其次,在 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 获得的阈值