python - 调整 SVM OVO 和 OVA 中的超参数以进行多类分类

标签 python scikit-learn classification svm gridsearchcv

假设我正在研究多类分类问题(有 N 类),并且我想使用 SVM 作为分类方法。

我可以采用两种策略:一对一(OVO)和一对多(OVA)。在第一种情况下,我需要训练 N(N-1)/2 个分类器,即 class1 vs class2, ..., class1 vs classN, ..., class(N -1) 与 classN,而在第二种情况下只是 N,即 class1 与其余部分,...,N 类与其余部分

据我所知,这两种场景的典型(和通用)代码(包括超参数的调整)如下:

OVO

from sklearn import svm
from sklearn.model_selection import GridSearchCV
X = # features-set
y = # labels
params_grid = # whatever
clf = GridSearchCV(svm.SVC(), params_grid)
clf.fit(X, y)

OVA

from sklearn import svm
from sklearn.multiclass import OneVsRestClassifier
from sklearn.model_selection import GridSearchCV
X = # features-set
y = # labels
params_grid = # whatever
clf = GridSearchCV(OneVsRestClassifier(svm.SVC()), params_grid)
clf.fit(X, y)

我的疑问如下:上面报告的代码搜索所有 N(N-1)/2N 分类器之间共享的最佳超参数,基于关于策略。换句话说,网格搜索在所有分类器之间平均找到“最佳”参数。

所以,我的问题是:为什么不搜索最佳的超参数集,每个 N(N-1)/2N 分类器都有一个?我找不到关于这个主题的任何引用,所以我不知道为每个分类器单独找到最佳参数在概念上是否错误,或者是否有其他解释。

最佳答案

I can adopt two strategies: One-Vs-One (OVO) and One-Vs-All (OVA)

您可以选择您喜欢的任何超参数调整策略 - Leave-One-OutK-foldRandomized K-fold - - 给定可用的计算资源和时间。归根结底,机器学习模型良好泛化的能力才是最重要的。当涉及到模型的学习和泛化能力时,最好将时间投入到特征工程上,而不是梳理所有可能的参数组合。说实话,您永远无法穷尽所有可能的组合,因为它们是以实数给出的。

why not searching the best hyper-parameters set, one for each of the N(N-1)/2or N classifiers

  • 我们对我们拥有的每个 𝑀 候选者执行此操作,这是由超参数搜索空间的基数定义的

  • 我们对我们拥有的每组验证子文件夹重复此操作,这是由您的交叉验证策略定义的。

编辑

关于您的多类预测策略。是的,OVO 和 OVA (OVR) 确实存在,尽管现在预测多类软概率更为传统。通过 OVR,您将获得另一个维度𝐾,即类别数量。是的,从概念上讲,您可以分别调整每个 OVR 模型的超参数。您的计算结果将变为 𝑂(𝑀×𝑁×𝐾)。

关于python - 调整 SVM OVO 和 OVA 中的超参数以进行多类分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65580809/

相关文章:

python - 多实例Django论坛软件

python - 使用 LSTM 节点训练 RNN

python - 如何将numpy Array 转换为tensorflow 可以分类的数据类型?

python - 为什么 BernoulliNBC 在 iris 数据集上的表现比 GaussianNBC 或 MultinomialNBC 差?

python列表理解结果很奇怪

python:从列表中创建元组列表

python - 无法终止已启动线程的进程

python - 在 sklearn python 中撤消 L2 规范化

python - 使用 SciKit-learn 和大型数据集进行文本分类

Python/ML : Which methods to use for Multiclass Classification for Product Categorization?