带有SVC的OneVsRestClassifier和带有decision_function_shape='ovr'的SVC有什么区别?

问题描述 投票:0回答:2

我认为应该是相同的,但是对于方法

decision_function()
我得到了不同的结果。而且只有
decision_function_shape='ovr'
的 SVC 确实更快。

相关:Scikit 学习支持向量机的多类分类

python scikit-learn svm
2个回答
6
投票

我在“参见”标题中的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 或 OneVsRestClassifier 等包装器中)返回 OvO 决策函数会破坏工作别人的。但我找不到任何地方明确写的。

有趣的事实:OneVsOneClassifier还返回一个与 OvR 的形状相一致的决策函数。


0
投票

但是,请注意,在内部,一对一(‘ovo’)始终用作训练模型的多类别策略; ovr 矩阵仅由 ovo 矩阵构造。对于二元分类,该参数被忽略。

从sklearn SVC官方文档https://scikit-learn.org/stable/modules/ generated/sklearn.svm.SVC.html来看,ovr策略似乎并没有真正实现。 ovr 结果是从 ovo 输出矩阵推断出来的。

所以我想如果你想严格遵循ovr策略,OneVsRestClassifier是一个更好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.