OneVsRestClassifier与SVC和SVC之间有什么区别,其中decision_function_shape =' ovr&#39 ;?

时间:2016-09-20 22:06:40

标签: python scikit-learn svm

我认为它应该是相同的,但对于方法decision_function(),我会得到不同的结果。只有decision_function_shape='ovr'的SVC真的更快。

相关:Scikit learn multi-class classification for support vector machines

1 个答案:

答案 0 :(得分:4)

我在See also标题中对documentation of LinearSVC做了一些澄清,其中提到了SVC。

  

SVC

     

使用libsvm实现支持向量机分类器:

     

...

     

...

     

此外,SVC多类模式使用一对一方案实现,而LinearSVC使用一种方案   与其他人相比。使用SVC可以实现一个与其余的一个   使用sklearn.multiclass.OneVsRestClassifier包装器。

     

...

此外,SVC将所有培训委托给基础libsvm库,该库将多类案例处理为'OvO'(即使decision_function_shape =' ovr')。

在问题中提到@delusionX提到decision_function_shape只是为了与scikit API兼容。最有可能的是,所有其他估算器都将多类作为OvR处理,因此当SVC与其他东西结合使用时(例如在Pipeline,GridSearchCV或Orpack,如OneVsRestClassifier中)返回OvO决策函数会破坏工作别人的。但我无法在任何地方找到明确的文字。

有趣的事实:OneVsOneClassifier还会返回一个决定函数,该函数会确认OvR的形状。