GridSearch для оценки внутри OneVsRestClassifier

Я хочу выполнить 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 недоступны.

Чтобы выполнить то, что я хочу, я вижу два решения:

  1. При создании SVC каким-то образом скажите ему не использовать стратегию one-vs-one, а одно-vs-all.
  2. Как-то покажите GridSearchCV, что параметры соответствуют оценке внутри OneVsRestClassifier.

Мне еще предстоит найти способ сделать любую из упомянутых альтернатив. Вы знаете, есть ли способ сделать любой из них? Или, может быть, вы могли бы предложить другой способ получить тот же результат?

Благодаря!

One Solution collect form web for “GridSearch для оценки внутри OneVsRestClassifier”

Когда вы используете вложенные оценки с помощью поиска по сетке, вы можете охватить параметры с помощью __ в качестве разделителя. В этом случае модель SVC сохраняется как атрибут с именем estimator внутри модели OneVsRestClassifier :

 from sklearn.datasets import load_iris from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import SVC from sklearn.grid_search import GridSearchCV from sklearn.metrics import f1_score iris = load_iris() model_to_set = OneVsRestClassifier(SVC(kernel="poly")) parameters = { "estimator__C": [1,2,4,8], "estimator__kernel": ["poly","rbf"], "estimator__degree":[1, 2, 3, 4], } model_tunning = GridSearchCV(model_to_set, param_grid=parameters, score_func=f1_score) model_tunning.fit(iris.data, iris.target) print model_tunning.best_score_ print model_tunning.best_params_ 

Это дает:

 0.973290762737 {'estimator__kernel': 'poly', 'estimator__C': 1, 'estimator__degree': 2} 
  • Сочетание текста и удаление пунктуации в NLTK и scikit-learn
  • Как классифицировать новые предложения с неизвестными атрибутами?
  • sklearn: как получить коэффициенты полиномиальных функций
  • Scikit-learn пользовательская функция оценки требует значений из набора данных, отличного от X и y
  • Что делает y, _ назначение в python / sklearn?
  • Невозможно импортировать sklearn.model_selection в scikit-learn
  • Как решить переобучение в случайном лесу Python sklearn?
  • sklearn: Пользовательская перекрестная проверка для данных временных рядов
  • Python - лучший язык программирования в мире.