sklearn:LinearSVC 和 OneSVM 的 AUC 分数

Posted

技术标签:

【中文标题】sklearn:LinearSVC 和 OneSVM 的 AUC 分数【英文标题】:sklearn: AUC score for LinearSVC and OneSVM 【发布时间】:2016-04-09 19:58:46 【问题描述】:

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

LinearSVCOneSVM 均不存在此选项。

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

【问题讨论】:

【参考方案1】:

回答我自己的问题。

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

在 SVM 的情况下,我看到人们为他们绘制 ROC 曲线的方式有两种:

    正如我在自己的问题中提到的那样,使用与决策绑定的距离 在 SVM 中使用偏置项作为阈值:http://researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVM。事实上,如果您使用SVC(probabilities=True),那么将通过使用 CV 为您计算概率,然后您可以使用它来绘制 ROC 曲线。但正如我提供的链接中所提到的,如果您通过改变偏差直接绘制 ROC 曲线会快得多。

如果我们使用线性内核,我认为 #2 与 #1 相同,就像我自己的情况一样,因为在这种特殊情况下改变偏差会改变距离。

【讨论】:

你有这样的代码吗?我整天都在苦苦挣扎。【参考方案2】:

为了计算 AUC,使用 sklearn,您需要在分类器上使用 predict_proba 方法;这就是SVC 上的probability 参数所做的(你说得对,它是使用交叉验证计算的)。来自文档:

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

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

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

【讨论】:

那不准确。您需要阈值,这些阈值不必是概率。通常您使用概率,但它们可以是分数,例如评估排名分类器的 ROC。 无论如何我看到我的问题在这里得到了回答:researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVM

以上是关于sklearn:LinearSVC 和 OneSVM 的 AUC 分数的主要内容,如果未能解决你的问题,请参考以下文章

sklearn:评估 LinearSVC AUC

sklearn多分类模型评测(LR, linearSVC, lightgbm)

sklearn.svm包中的SVC(kernel=”linear“)和LinearSVC的区别

哪个稀疏矩阵表示与 sklearn.svm.LinearSVC 一起使用

如何将 TfidfVectorizer 的输出馈送到 Sklearn 中的 LinearSVC 分类器?

LinearSVC 和 SVC(kernel="linear") 有啥区别?