SVC モデルで GridSearchCV を実行したいのですが、それは 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 のパラメーターにはアクセスできません。
私が望むことを達成するために、私は2つの解決策を見ています:
- SVC を作成するときは、1 対 1 の戦略ではなく、1 対すべての戦略を使用するように何らかの方法で指示します。
- パラメーターが OneVsRestClassifier 内の推定器に対応することを GridSearchCV に何らかの方法で示します。
言及された代替手段のいずれかを実行する方法をまだ見つけていません。それらのいずれかを行う方法があるかどうか知っていますか? または、同じ結果を得るための別の方法を提案できますか?
ありがとう!