sklearn:LinearSVC和OneSVM的AUC分数

时间:2016-01-05 20:55:31

标签: scikit-learn svm libsvm

SVM分类器(SVC)的一个选项是probability,默认情况下为false。文档没有说明它的作用。查看libsvm源代码,似乎可以进行某种交叉验证。

LinearSVCOneSVM不存在此选项。

我需要计算几个SVM模型的AUC分数,包括最后两个。我应该使用decision_function(X)作为阈值来计算AUC分数吗?

2 个答案:

答案 0 :(得分:5)

回答我自己的问题。

首先,您需要绘制ROC曲线的概率是一个常见的“神话”。不,您需要在模型中使用某种可以更改的阈值。然后通过改变该阈值来绘制ROC曲线。当然,ROC曲线的重点在于通过观察模型对观测结果的排序程度来了解模型复制假设的程度。

对于SVM,有两种方法可以让人们为它们绘制ROC曲线:

  1. 使用距离决定债券,正如我在自己的问题中提到的那样
  2. 在SVM中使用偏差项作为您的阈值:http://researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVM。实际上,如果使用SVC(probabilities=True),那么将使用CV为您计算概率,然后可以使用CV绘制ROC曲线。但正如我提供的链接中所提到的,如果通过改变偏差直接绘制ROC曲线,速度会快得多。
  3. 如果我们使用线性内核,我认为#2与#1相同,就像我自己的情况一样,因为在这种特殊情况下改变偏差会改变距离。

答案 1 :(得分:0)

为了使用sklearn计算AUC,您需要在分类器上使用predict_proba方法;这就是probabilitySVC参数的作用(您使用交叉验证计算它是正确的)。来自文档:

  

概率:布尔值,可选(默认=假)

     

是否启用概率估算。必须在调用fit之前启用它,并且会减慢该方法的速度。

您不能直接使用决策函数来计算AUC,因为它不是概率。我想你可以扩展决策函数以获取范围[0,1]中的值,并计算AUC,但是我不确定它将具有哪些统计属性;你肯定无法用它来与使用概率计算的ROC进行比较。