2016-04-25 10 views
0

でトレーニングデータとscikit学習グリッド検索を行うことができ、私はこのようになりますパイプラインを使用して、テキスト分類問題に取り組んでいます:は、どのように私はイテレータ

self.full_classifier = Pipeline([ 
     ('vectorize', CountVectorizer()), 
     ('tf-idf', TfidfTransformer()), 
     ('classifier', SVC(kernel='linear', class_weight='balanced')) 
    ]) 

完全なコーパスが大きすぎますメモリに収めるには十分ですが、ベクトル化ステップの後ではメモリの問題はありません。私は正常にself._all_dataは(self.datasetだけの文書IDのとターゲットを含みながら)学習事例ごとに文書を生成するイテレータである

self.full_classifier.fit(
     self._all_data (max_samples=train_data_length), 
     self.dataset.head(train_data_length)['target'].values 
) 

を使用して分類器を収めることができます。ここで、max_samplesはオプションです。トレーニング/テストデータで分割を行うために使用しています。私は今、そのために私はこのコードを使用しています、パラメータを最適化するためにgridsearchを使用したい:

parameters = { 
     'vectorize__stop_words': (None, 'english'), 
     'tfidf__use_idf': (True, False), 
     'classifier__class_weight': (None, 'balanced') 
    } 
gridsearch_classifier = GridSearchCV(self.full_classifier, parameters, n_jobs=-1) 
gridsearch_classifier.fit(self._all_data(), self.dataset['target'].values) 

私の問題は、これが次のエラーが発生していることである:gridsearch_classifierでトレースバックポインティングと

TypeError: Expected sequence or array-like, got <type 'generator'> 

。 (そしてscikitのコードに、_num_samples(x)で発生したエラー)。入力としてジェネレータに合わせることが可能なので、グリッド検索でこれを行う方法があるかどうか、私は現在不足しています。 何か助けていただければ幸いです!

答えて

0

ジェネレータをリストとしてマテリアライズする必要はありません。いろいろな適合方法が、一度に1つのアイテムを消費し、イテレータを受け入れるように構成されることが多いが、グリッド検索はさらにクロスバリデーションを実行し、実現セットをインデックスすることによってデータのCV分割を生成する。

+0

ありがとうございます。私は、データベースにヒットする__getitem__を実装して、リストを偽装する方法を検討します – Leo