GridSearch для оценки внутри OneVsRestClassifier
Я хочу выполнить GridSearchCV в SVC-модели, но это использует стратегию one-vs-all. Для последней части я могу просто сделать это:
model_to_set = OneVsRestClassifier(SVC(kernel="poly"))
Моя проблема связана с параметрами. Предположим, я хочу попробовать следующие значения:
- Рекурсивное устранение функции в случайном лесу с использованием scikit-learn
- Возможные способы сделать одну горячую кодировку в scikit-learn?
- Panda's get_dummies против OneHotEncoder от Sklearn () :: Что более эффективно?
- Кластеризация текстовых документов с использованием scikit-learn kmeans в Python
- Как kmeans знают, как кластерные документы, когда мы только кормите его tfidf векторами отдельных слов?
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.
Мне еще предстоит найти способ сделать любую из упомянутых альтернатив. Вы знаете, есть ли способ сделать любой из них? Или, может быть, вы могли бы предложить другой способ получить тот же результат?
Благодаря!
- sklarn's PLSRegression: "ValueError: array не должен содержать infs или NaNs"
- Внедрить классификатор K-соседей в scikit-learn с 3 функциями на объект
- Как я узнаю, что раньше я даю научиться sci-kit? (Классификаторы наивных заливов).
- UndefinedMetricWarning: F-score не определен и устанавливается на 0.0 в меток без прогнозируемых выборок
- TF-IDF Простое использование - NLTK / Scikit Learn
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}
- Как получить идентификатор процесса в Unix или Linux с помощью Python?
- Динамическое использование шаблонов в Jinja2