Я пытаюсь построить модель с несколькими выходами с помощью GridSearchCV и Pipeline. Конвейер вызывает у меня проблемы, потому что в стандартных примерах классификатора нет OneVsRestClassifier (), обертывающего классификатор. Я использую scikit-learn 0.18 и python 3.5
## Pipeline: Train and Predict
## SGD: support vector machine (SVM) with gradient descent
from sklearn.multiclass import OneVsRestClassifier
from sklearn.pipeline import Pipeline
from sklearn.linear_model import SGDClassifier
clf = Pipeline([
('vect', CountVectorizer(ngram_range=(1,3), max_df=0.50 ) ),
('tfidf', TfidfTransformer() ),
('clf', SGDClassifier(loss='modified_huber', penalty='elasticnet',
alpha=1e-4, n_iter=5, random_state=42,
shuffle=True, n_jobs=-1) ),
])
ovr_clf = OneVsRestClassifier(clf )
from sklearn.model_selection import GridSearchCV
parameters = {'vect__ngram_range': [(1,1), (1,3)],
'tfidf__norm': ('l1', 'l2', None),
'estimator__loss': ('modified_huber', 'hinge',),
}
gs_clf = GridSearchCV(estimator=pipeline, param_grid=parameters,
scoring='f1_weighted', n_jobs=-1, verbose=1)
gs_clf = gs_clf.fit(X_train, y_train)
Но это дает ошибку: ....
ValueError: Недопустимая оценка параметра для конвейера оценки (steps = [('vect', CountVectorizer (analyzer = 'word', binary = False, decode_error = 'strict', dtype =, encoding = 'utf-8', input = 'content ', нижний регистр = True, max_df = 0.5, max_features = None, min_df = 1, ngram_range = (1, 3), препроцессор = None, stop_words = None, strip ... er_t = 0.5, random_state = 42, shuffle = True, verbose = 0, warm_start = False), n_jobs = -1))]). Проверьте список доступных параметров с помощью
estimator.get_params().keys()
.
Итак, как правильно передавать параметры в clf через OneVsRestClassifier, используя param_grid и Pipeline? Нужно ли мне отделить векторизатор и tdidf от классификатора в конвейере?