2016-10-17 2 views
1

私は、CountVectorizer、TfidfTransformer、およびMultinomial Naive Bayesクラシファイアからなるテキスト解析と分類のための簡単なパイプラインを持っています。パイプラインでのグリッド検索後のトランスパラメータの更新

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())]) 

私は今GridSearchCV(stop_wordsストップワードの前にロードされたリストが含まれている)を使用して、最良のパラメータを決定:

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) 

私は今grid_clf.best_params_を使用してモデルの最良のパラメータを見ることができます:

{'clf__alpha': 0.050000000000000003, 
'tfidf__use_idf': True, 
'vect__ngram_range': (1, 3), 
'vect__stop_words': None} 

私の質問は、グリッド検索によって返された最良のパラメータで更新されたパイプラインを取り戻すにはどうすればいいですか?私はパイプライン(CountVectorizerとTfidfTransformer)の最初の2つのステップを適切なパラメータで呼び出すことができます。私が発見した

回避策の一つは、明示的にグリッド検索によって返された最良のパラメータで新しいパイプラインを作成している:

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) 

私は今multinomial_clf.stepsを使用してCountVectorizerとTfidfTransformerにアクセスすることができますが、私は簡単に存在する必要があります確信しています方法。

おかげであなたの助けのためにたくさん!私はパイプラインの変圧器を使用して変換する方法に関して、まだ混乱していますが

答えて

0

最高のパラメータを持つパイプラインはgrid_clf.best_estimator_

grid_clf.best_estimator_ 

Pipeline(steps=[('vect', CountVectorizer(analyzer='word', binary=False, decode_error='strict', 
    dtype=<class 'numpy.int64'>, encoding='utf-8', input='content', 
    lowercase=True, max_df=1.0, max_features=None, min_df=1, 
    ngram_range=(1, 3), preprocessor=None, stop_words=None, 
    strip...near_tf=False, use_idf=True)), ('clf', MultinomialNB(alpha=0.02, class_prior=None, fit_prior=True))]) 

で見つけることができます。最初の2つのステップは変換メソッドを実装しますが、最後のステップは変換メソッドを実装しません。しかし、私は、呼び出そうとします。あなたの助け

ため

AttributeError: 'MultinomialNB' object has no attribute 'transform' 

ありがとう:私は次のエラーを取得する

grid_clf.best_estimator_.transform(['ok computer']) 

関連する問題