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

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

LinearSVCOneSVM 均不存在此选项。

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

【问题讨论】:

    标签: scikit-learn svm libsvm


    【解决方案1】:

    回答我自己的问题。

    首先,绘制 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 为您计算概率,然后您可以使用它来绘制 ROC 曲线。但正如我提供的链接中所提到的,如果您通过改变偏差直接绘制 ROC 曲线会快得多。

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

    【讨论】:

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

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

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

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

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

    【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2017-07-16
    • 2017-10-25
    • 2016-06-19
    • 2020-11-27
    • 2018-09-07
    • 2021-08-05
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多