使用 OneVsRestClassifier 时 sklearn.svm.SVC 的哪个 decision_function_shape?

del*_*onX 6 python svm scikit-learn text-classification multilabel-classification

我正在做多标签分类,我试图预测问题的正确标签:

(X = 问题,y = X 中每个问题的标签列表)。

我想知道,哪个decision_function_shapeforsklearn.svm.SVC应该与OneVsRestClassifier?

从文档中我们可以看到decision_function_shape可以有两个值'ovo''ovr'

decision_function_shape: '卵内', 'OVR'或无,默认=无

是否像所有其他分类器一样返回形状为 (n_samples, n_classes) 的一对一 ('ovr') 决策函数,或具有形状 (n_samples) 的 libsvm 的原始一对一 ('ovo') 决策函数, n_classes * (n_classes - 1) / 2)。None 的默认值当前将表现为向后兼容的“ovo”并引发弃用警告,但将在 0.19 中更改“ovr”。

但我仍然不明白这两者之间的区别是什么:

# First decision_function_shape set to 'ovo'
estim = OneVsRestClassifier(SVC(kernel='linear', decision_function_shape ='ovo'))

# Second decision_function_shape set to 'ovr'
estim = OneVsRestClassifier(SVC(kernel='linear', decision_function_shape ='ovr'))
Run Code Online (Sandbox Code Playgroud)

哪个decision_function_shape应该用于多标签分类问题?

编辑: 问题询问类似的事情而没有答案。

Grr*_*Grr 4

我认为应该使用哪个的问题最好还是根据情况而定。这很容易成为您的 GridSearch 的一部分。但凭直觉我会觉得,就差异而言,你们都会做同样的事情。这是我的推理:

OneVsRestClassifier旨在独立地针对所有其他类对每个类进行建模,并为每种情况创建一个分类器。我理解这个过程的方式是OneVsRestClassifier获取一个类,并创建一个二进制标签来判断一个点是否属于该类。然后,该标签将被输入到您选择使用的任何估算器中。我相信混乱的原因在于,这SVC也允许您做出相同的选择,但实际上,对于此实现,选择并不重要,因为您始终只将两个类输入到SVC.

这是一个例子:

from sklearn.datasets import load_iris
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC

data = load_iris()

X, y = data.data, data.target
estim1 = OneVsRestClassifier(SVC(kernel='linear', decision_function_shape='ovo'))
estim1.fit(X,y)

estim2 = OneVsRestClassifier(SVC(kernel='linear', decision_function_shape='ovr'))
estim2.fit(X,y)

print(estim1.coef_ == estim2.coef_)
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到两个模型构建的所有三个估计器的系数都相等。尽管该数据集只有 150 个样本和 3 个类,因此对于更复杂的数据集,这些结果可能会有所不同,但这是一个简单的概念证明。

  • 这里补充一下,SVC内部将始终使用“OvO”,decision_function_shape仅用于兼容性,不用于数据拟合。所以 `coef_` 将始终相等。我已经在[链接的问题](/sf/ask/2772312791/ Between-onevsrestclassifier-with-svc-and-svc-with-decisio?rq=1中回答了这个问题) (2认同)