ROC 曲线和 libsvm
Posted
技术标签:
【中文标题】ROC 曲线和 libsvm【英文标题】:ROC curve and libsvm 【发布时间】:2014-07-20 07:56:06 【问题描述】:给定使用plotroc.m
绘制的ROC 曲线(参见here):
-
理论问题:如何选择要使用的最佳阈值?
编程问题:如何诱导
libsvm
分类器使用选定的(最佳)阈值?
【问题讨论】:
【参考方案1】: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 获得的阈值
【讨论】:
有人已经为计算 AUC (ROC) 的 libsvm 实现了一个扩展。可以在这里找到:csie.ntu.edu.tw/~cjlin/libsvmtools/eval/index.html以上是关于ROC 曲线和 libsvm的主要内容,如果未能解决你的问题,请参考以下文章