SVM分类器(SVC
)的一个选项是probability
,默认情况下为false。文件中没有说明它的作用。查看libsvm
源代码,它似乎进行了某种交叉验证。
LinearSVC
和OneSVM
都不存在此选项。
我需要计算几个SVM模型的AUC分数,包括最后两个。我应该使用decision_function(X)
作为阈值来计算AUC得分吗?
回答我自己的问题。
首先,绘制ROC曲线需要概率,这是一个常见的"神话"。不,您需要在您的模型中设置某种可以更改的阈值。然后通过改变该阈值来绘制ROC曲线。当然,ROC曲线的点是,通过观察你的模型对观察结果的排序,来观察它在多大程度上复制了假设。
在支持向量机的情况下,我认为有两种方法可以帮助人们绘制ROC曲线:
- 正如我在自己的问题中提到的,使用与决策债券的距离
- 在SVM中使用偏差项作为阈值:http://researchgate.net/post/How_can_I_plot_determine_ROC_AUC_for_SVM.事实上,如果你使用
SVC(probabilities=True)
,那么概率将以这种方式通过使用CV来计算,然后你可以使用CV来绘制ROC曲线。但正如我提供的链接中所提到的,如果通过改变偏差直接绘制ROC曲线,速度会快得多
我认为,如果我们使用线性核,#2和#1是一样的,就像在我自己的情况下一样,因为在这种特殊情况下,改变偏差就是改变距离。
为了使用sklearn计算AUC,您需要在分类器上使用predict_proba
方法;这就是SVC
上的probability
参数的作用(使用交叉验证进行计算是正确的)。来自文档:
概率:布尔值,可选(默认值=False)
是否启用概率估计。这必须在调用fit之前启用,并且会减慢该方法的速度。
您不能直接使用决策函数来计算AUC,因为它不是概率。我想你可以缩放决策函数,取[0,1]
范围内的值,并计算AUC,但我不确定这会有什么统计特性;你肯定无法用它来与使用概率计算的ROC进行比较。