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的主要内容,如果未能解决你的问题,请参考以下文章

预测概率是什么?ROC曲线是什么?PR曲线是什么?ROC曲线和PR曲线使用场景差异?

ROC曲线和PR曲线

人工智能——分类器性能指标之ROC曲线AUC值

人工智能——分类器性能指标之ROC曲线AUC值

多分类ROC曲线

ROC曲线 大于阈值后如何计算HR