我认为它应该是相同的,但对于方法decision_function()
,我得到不同的结果。只有decision_function_shape='ovr'
的SVC确实更快。
相关:Scikit learn多类分类支持向量机
我在另见标题中对LinearSVC的文档进行了一些澄清,其中提到了SVC。
SVC
使用libsvm实现支持向量机分类器:
…
…
此外,SVC多类模式使用一对一方案实现,而线性SVC使用一对一方案实现对其他人。可以通过SVC实现其中一个与其余的使用sklearn.multiclass.OneVsRestClassifier包装器。
…
此外,SVC将所有训练委托给底层libsvm
库,该库将多类情况处理为'OvO'
(即使decision_function_shape = 'ovr')。
在问题@delusionX中提到decision_function_shape
只是为了兼容scikit API。最有可能的是,所有其他估计器都将多类处理为OvR,因此当SVC与其他东西结合使用时,(例如在Pipeline, GridSearchCV或像OneVsRestClassifier这样的包装器中)返回OvO决策函数会破坏其他人的工作。但是我找不到任何地方明确地写着
有趣的事实:onevsonecclassifier还返回一个决策函数,该函数与OvR的形状一致。