Ich versuche, ein Multi-Output-Modell mit GridSearchCV und Pipeline zu erstellen. Die Pipeline bereitet mir Probleme, weil Standard-Klassifikator-Beispiele nicht den OneVsRestClassifier() haben, der den Klassifikator umschließt. Ich verwende Scikit-Learn 0,18 und Python 3,5Scikit-lernen Multi-Output-Klassifikator mit: GridSearchCV, Pipeline, OneVsRestClassifier, SGDClassifier
## 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)
Aber das ergibt den Fehler: ....
ValueError: Invalid parameter estimator for estimator Pipeline(steps=[('vect', CountVectorizer(analyzer='word', binary=False, decode_error='strict', dtype=, encoding='utf-8', input='content', lowercase=True, max_df=0.5, max_features=None, min_df=1, ngram_range=(1, 3), preprocessor=None, stop_words=None, strip...er_t=0.5, random_state=42, shuffle=True, verbose=0, warm_start=False), n_jobs=-1))]). Check the list of available parameters with
estimator.get_params().keys()
.
Also, was ist der richtige Weg, Parameter, um durch die OneVsRestClassifier CLF mit param_grid und Pipeline? Muss ich den Vectorizer und Tdidf vom Klassifikator in der Pipeline trennen?
Das hat funktioniert! (1) Ich habe den OneVsRestClassifier innerhalb der Pipeline verschoben, um SGDClassifier zu umbrechen. (2) Ich habe das Präfix "clf__" zu den param_grid-Handhabungsschätzparametern, d. H. "Clf__stimator__penalty", hinzugefügt. – MyopicVisage