sklearn:LinearSVC 和 OneSVM 的 AUC 分数
sklearn: AUC score for LinearSVC and OneSVM
SVM 分类器 (SVC
) 的一个选项是 probability
,默认情况下为 false。该文档没有说明它的作用。查看 libsvm
源代码,它似乎做了某种交叉验证。
LinearSVC
和 OneSVM
都不存在此选项。
我需要计算几个 SVM 模型的 AUC 分数,包括最后两个。我应该使用 decision_function(X)
作为阈值来计算 AUC 分数吗?
为了使用 sklearn 计算 AUC,您需要在分类器上使用 predict_proba
方法;这就是 SVC
上的 probability
参数所做的(你是正确的,它是使用 cross-validation 计算的)。来自文档:
probability : boolean, optional (default=False)
Whether to enable probability estimates. This must be enabled prior to calling fit, and will slow down that method.
您不能直接使用决策函数来计算 AUC,因为它不是概率。我想您可以缩放决策函数以获取 [0,1]
范围内的值并计算 AUC,但是我不确定这将具有什么统计属性;你当然不能用它来与使用概率计算的 ROC 进行比较。
回答我自己的问题。
首先,绘制ROC曲线需要概率是一个常见的"myth"。不,您需要在模型中设置某种可以更改的阈值。然后通过更改此阈值绘制 ROC 曲线。当然,ROC 曲线的重点是通过查看模型对观察结果的排序情况来了解模型重现假设的情况。
在 SVM 的情况下,我看到人们为他们绘制 ROC 曲线的方式有两种:
- 正如我在自己的问题中提到的那样,使用到决策边界的距离
- 在 SVM 中使用偏差项作为阈值:http://researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVM。事实上,如果您使用
SVC(probabilities=True)
,那么概率将以这种方式通过使用 CV 为您计算,然后您可以使用它来绘制 ROC 曲线。但是正如我提供的 link 中提到的,如果您直接通过改变偏差来绘制 ROC 曲线,则速度要快得多。
我认为如果我们使用线性内核,就像我自己的情况一样,#2 与#1 相同,因为在这种特殊情况下,改变偏差会改变距离。
SVM 分类器 (SVC
) 的一个选项是 probability
,默认情况下为 false。该文档没有说明它的作用。查看 libsvm
源代码,它似乎做了某种交叉验证。
LinearSVC
和 OneSVM
都不存在此选项。
我需要计算几个 SVM 模型的 AUC 分数,包括最后两个。我应该使用 decision_function(X)
作为阈值来计算 AUC 分数吗?
为了使用 sklearn 计算 AUC,您需要在分类器上使用 predict_proba
方法;这就是 SVC
上的 probability
参数所做的(你是正确的,它是使用 cross-validation 计算的)。来自文档:
probability : boolean, optional (default=False)
Whether to enable probability estimates. This must be enabled prior to calling fit, and will slow down that method.
您不能直接使用决策函数来计算 AUC,因为它不是概率。我想您可以缩放决策函数以获取 [0,1]
范围内的值并计算 AUC,但是我不确定这将具有什么统计属性;你当然不能用它来与使用概率计算的 ROC 进行比较。
回答我自己的问题。
首先,绘制ROC曲线需要概率是一个常见的"myth"。不,您需要在模型中设置某种可以更改的阈值。然后通过更改此阈值绘制 ROC 曲线。当然,ROC 曲线的重点是通过查看模型对观察结果的排序情况来了解模型重现假设的情况。
在 SVM 的情况下,我看到人们为他们绘制 ROC 曲线的方式有两种:
- 正如我在自己的问题中提到的那样,使用到决策边界的距离
- 在 SVM 中使用偏差项作为阈值:http://researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVM。事实上,如果您使用
SVC(probabilities=True)
,那么概率将以这种方式通过使用 CV 为您计算,然后您可以使用它来绘制 ROC 曲线。但是正如我提供的 link 中提到的,如果您直接通过改变偏差来绘制 ROC 曲线,则速度要快得多。
我认为如果我们使用线性内核,就像我自己的情况一样,#2 与#1 相同,因为在这种特殊情况下,改变偏差会改变距离。