![](/img/trans.png)
[英]Question on tuning hyper-parameters with scikit-learn GridSearchCV
[英]Tuning hyper-parameters in SVM OVO and OVA for multiclass classification
假设我正在研究一个多类分类问题(有N
个类)并且我想使用 SVM 作为分类方法。
我可以采用两种策略:一对一(OVO)和一对一(OVA)。 在第一种情况下,我需要训练N(N-1)/2
分类器,即class1 vs class2, ..., class1 vs classN, ..., class(N-1) vs classN
,而在第二种情况下案例只是N
,即class1 vs rest, ..., class N vs rest
。
据我所知,这两种场景的典型(和通用)代码,包括超参数的调整,将是:
卵子
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)/2
或N
个分类器之间共享的最佳超参数。 换句话说,网格搜索在所有分类器之间平均找到“最佳”参数。
所以,我的问题是:为什么不搜索最好的超参数集,每个N(N-1)/2
或N
个分类器一个? 我找不到关于这个主题的任何参考资料,所以我不知道分别为每个分类器找到最佳参数是否在概念上是错误的,或者是否有其他解释。
我可以采用两种策略:One-Vs-One (OVO) 和 One-Vs-All (OVA)
给定可用的计算资源和时间,您可以选择您喜欢的任何超参数调整策略Leave-One-Out
、 K-fold
、 Randomized K-fold
。 归根结底(一周?)您的 ML model 的概括能力是最重要的。 而当谈到 model 学习和概括的能力时,最好将时间投资于特征工程,而不是梳理所有可能的参数组合。 说实话,你永远不会穷尽所有可能的组合,因为它们是以实数给出的。
为什么不搜索最好的超参数集,每个 N(N-1)/2 或 N 个分类器一个
我们为我们拥有的每个候选人都这样做,这是由超参数搜索空间的基数定义的
我们对我们拥有的每组验证子文件夹重复它,这是由您的交叉验证策略定义的。
编辑
关于您的多类预测策略。 是的,OVO 和 OVA (OVR) 确实存在,尽管如今预测多类 softprobs 更为传统。 使用 OVR,您将获得另一个维度,即课程数量。 是的,从概念上讲,您可以分别为每个 OVR model 调整超参数。 您的计算将变为(××)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.