【发布时间】:2021-04-11 07:35:34
【问题描述】:
假设我正在处理一个多类分类问题(使用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。
据我所知,这两种场景的典型(和通用)代码,包括超参数的调整,将是:
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)/2 或N 分类器之间共享的最佳超参数。换句话说,网格搜索在所有分类器之间平均找到“最佳”参数。
所以,我的问题是:为什么不搜索最好的超参数集,每个 N(N-1)/2 或 N 分类器一个?我找不到关于这个主题的任何参考资料,所以我不知道分别为每个分类器找到最佳参数是否在概念上是错误的,或者是否有其他解释。
【问题讨论】:
标签: python scikit-learn classification svm gridsearchcv