J'ai un simple Pipeline d'analyse et de classification de texte constitué d'un CountVectorizer, d'un TfidfTransformer et enfin d'un classificateur Multinomial Naive Bayes.Mise à jour des paramètres du transformateur après la recherche de réseau sur le Pipeline
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
text_clf = Pipeline([('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', MultinomialNB())])
Je détermine maintenant les meilleurs paramètres à l'aide GridSearchCV (stop_words contient une liste de mots d'arrêt chargés précédemment):
from sklearn.model_selection import GridSearchCV
parameters = {'vect__ngram_range': [(1,1), (1,2), (1,3)],
'vect__stop_words': [None, stop_words],
'tfidf__use_idf': [True, False],
'clf__alpha': np.arange(0.0, 1.05, 0.05)
}
grid_clf = GridSearchCV(text_clf, parameters, n_jobs = 1)
_ = grid_clf.fit(X_train, y_train)
Je peux maintenant voir les meilleurs paramètres du modèle en utilisant grid_clf.best_params_
:
{'clf__alpha': 0.050000000000000003,
'tfidf__use_idf': True,
'vect__ngram_range': (1, 3),
'vect__stop_words': None}
Ma question est: comment puis-je récupérer un pipeline mis à jour avec les meilleurs paramètres renvoyés par la recherche de grille? Je voudrais pouvoir appeler les deux premières étapes du pipeline (CountVectorizer et TfidfTransformer) avec les paramètres appropriés.
Une solution que j'ai trouvé crée explicitement un nouveau pipeline avec les meilleurs paramètres renvoyés par la recherche de la grille:
multinomial_clf = Pipeline([('vect', CountVectorizer(stop_words=None, ngram_range=(1,3))),
('tfidf', TfidfTransformer(use_idf = True)),
('clf', MultinomialNB(alpha=0.05))])
_ = multinomial_clf.fit(X_train, y_train)
Je peux maintenant accéder au CountVectorizer et TfidfTransformer en utilisant multinomial_clf.steps
mais je suis sûr qu'il doit y avoir un moyen plus facile façon.
Merci beaucoup pour votre aide!