Я хочу выполнить GridSearchCV в SVC-модели, но это использует стратегию one-vs-all. Для последней части я могу просто сделать это:
model_to_set = OneVsRestClassifier(SVC(kernel="poly"))
Моя проблема связана с параметрами. Скажем, я хочу попробовать следующие значения:
parameters = {"C":[1,2,4,8], "kernel":["poly","rbf"],"degree":[1,2,3,4]}
Чтобы выполнить GridSearchCV, я должен сделать что-то вроде:
cv_generator = StratifiedKFold(y, k=10)
model_tunning = GridSearchCV(model_to_set, param_grid=parameters, score_func=f1_score, n_jobs=1, cv=cv_generator)
Однако, я выполняю его, я получаю:
Traceback (most recent call last):
File "/.../main.py", line 66, in <module>
argclass_sys.set_model_parameters(model_name="SVC", verbose=3, file_path=PATH_ROOT_MODELS)
File "/.../base.py", line 187, in set_model_parameters
model_tunning.fit(self.feature_encoder.transform(self.train_feats), self.label_encoder.transform(self.train_labels))
File "/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py", line 354, in fit
return self._fit(X, y)
File "/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py", line 392, in _fit
for clf_params in grid for train, test in cv)
File "/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py", line 473, in __call__
self.dispatch(function, args, kwargs)
File "/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py", line 296, in dispatch
job = ImmediateApply(func, args, kwargs)
File "/usr/local/lib/python2.7/dist-packages/sklearn/externals/joblib/parallel.py", line 124, in __init__
self.results = func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py", line 85, in fit_grid_point
clf.set_params(**clf_params)
File "/usr/local/lib/python2.7/dist-packages/sklearn/base.py", line 241, in set_params
% (key, self.__class__.__name__))
ValueError: Invalid parameter kernel for estimator OneVsRestClassifier
В принципе, поскольку SVC находится внутри OneVsRestClassifier и что ящик оценки посылает в GridSearchCV, параметры SVC недоступны.
Чтобы выполнить то, что я хочу, я вижу два решения:
- При создании SVC каким-то образом скажите ему не использовать стратегию one-vs-one, а одно-vs-all.
- Как-то покажите GridSearchCV, что параметры соответствуют оценке внутри OneVsRestClassifier.
Мне еще предстоит найти способ сделать любую из упомянутых альтернатив. Вы знаете, есть ли способ сделать любой из них? Или, может быть, вы могли бы предложить другой способ получить тот же результат?
Спасибо!