Wie kann ich die beste Pipeline aus einem Fit GridSearchCV
extrahieren, so dass ich es an cross_val_predict
weitergeben kann?Extrahieren Sie die beste Pipeline von GridSearchCV für cross_val_predict
Direkt Passing Pass GridSearchCV
Objekt verursacht cross_val_predict
, um die gesamte Grid-Suche wieder zu laufen, ich möchte nur die beste Pipeline unterliegen der cross_val_predict
Auswertung.
Mein umluftunabhängigem Code ist unten:
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.pipeline import Pipeline
from sklearn.grid_search import GridSearchCV
from sklearn.model_selection import cross_val_predict
from sklearn.model_selection import StratifiedKFold
from sklearn import metrics
# fetch data data
newsgroups = fetch_20newsgroups(remove=('headers', 'footers', 'quotes'), categories=['comp.graphics', 'rec.sport.baseball', 'sci.med'])
X = newsgroups.data
y = newsgroups.target
# setup and run GridSearchCV
wordvect = TfidfVectorizer(analyzer='word', lowercase=True)
classifier = OneVsRestClassifier(SVC(kernel='linear', class_weight='balanced'))
pipeline = Pipeline([('vect', wordvect), ('classifier', classifier)])
scoring = 'f1_weighted'
parameters = {
'vect__min_df': [1, 2],
'vect__max_df': [0.8, 0.9],
'classifier__estimator__C': [0.1, 1, 10]
}
gs_clf = GridSearchCV(pipeline, parameters, n_jobs=8, scoring=scoring, verbose=1)
gs_clf = gs_clf.fit(X, y)
### outputs: Fitting 3 folds for each of 12 candidates, totalling 36 fits
# manually extract the best models from the grid search to re-build the pipeline
best_clf = gs_clf.best_estimator_.named_steps['classifier']
best_vectorizer = gs_clf.best_estimator_.named_steps['vect']
best_pipeline = Pipeline([('best_vectorizer', best_vectorizer), ('classifier', best_clf)])
# passing gs_clf here would run the grind search again inside cross_val_predict
y_predicted = cross_val_predict(pipeline, X, y)
print(metrics.classification_report(y, y_predicted, digits=3))
Was ich zur Zeit von der best_estimator_
die Pipeline wird manuell neu bauen tue. Aber meine Pipelines haben normalerweise mehr Schritte wie SVD oder PCA, und manchmal füge ich Schritte hinzu oder entferne sie und führe die Grid-Suchen erneut aus, um die Daten zu untersuchen. Dieser Schritt muss dann immer wiederholt werden, wenn die Pipeline manuell neu aufgebaut wird, was fehleranfällig ist.
Gibt es eine Möglichkeit, die beste Pipeline von einem Fit GridSearchCV
direkt zu extrahieren, so dass ich es an cross_val_predict
weitergeben kann?