Scikit learn sklearn:LinearSVC和OneSVM的AUC分数

Scikit learn sklearn:LinearSVC和OneSVM的AUC分数,scikit-learn,svm,libsvm,Scikit Learn,Svm,Libsvm,SVM分类器(SVC)的一个选项是probability,默认为false。文档没有说明它的功能。查看libsvm源代码,它似乎进行了某种交叉验证 此选项不适用于LinearSVC或OneSVM 我需要计算几个SVM模型的AUC分数,包括最后两个。我是否应该使用decision\u函数(X)作为阈值来计算AUC分数?为了使用sklearn计算AUC,您需要在分类器上使用predict\u proba方法;这就是SVC上的probability参数所做的(使用交叉验证计算它是正确的)。从文档中:

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

此选项不适用于
LinearSVC
OneSVM


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

为了使用sklearn计算AUC,您需要在分类器上使用
predict\u proba
方法;这就是
SVC
上的
probability
参数所做的(使用交叉验证计算它是正确的)。从文档中:

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

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


不能直接使用决策函数来计算AUC,因为它不是概率。我想您可以缩放决策函数,以获取
[0,1]
范围内的值,并计算AUC,但我不确定这将具有什么统计特性;你当然不能用它来比较使用概率计算的ROC。

回答我自己的问题

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

在SVM的例子中,我看到人们用两种方式为他们绘制ROC曲线:

  • 使用到决策约束对象的距离,正如我在自己的问题中提到的
  • 使用偏差项作为SVM中的阈值:。事实上,如果您使用
    SVC(probabilities=True)
    则概率将通过使用CV以这种方式为您计算,然后您可以使用CV绘制ROC曲线。但正如我提供的链接中提到的,如果通过改变偏差直接绘制ROC曲线,速度会快得多

  • 我认为#2和#1是一样的,如果我们使用线性核,就像我自己的情况一样,因为在这个特殊情况下,改变偏差就是改变距离。

    这是不准确的。您需要阈值,这些阈值不必是概率。通常你使用概率,但它们可以是分数,就像在评估排名分类器的ROC时一样?我一整天都在做这件事,失败得很惨。