私はpythonでscikit-learnライブラリのさまざまな分類子の精度を訓練して分析するために、1.6Mのつぶやきからなるsentiment140データセットを使用しています。私は次のコードスニペットを使って、ツイートを分類器に供給する前に特徴ベクトルにベクトル化しています。この後scikit-learnを使用して非常に大きなデータセットをトレーニング/アップスケールする方法はありますか?
vectorizer = CountVectorizer(max_features = 2000)
train_set = (vectorizer.fit_transform(trainX)).toarray()
私は、次のコードスニペットを使用してGaussianNB()
、MultinomialNB()
、BernoulliNB()
、LogisticRegression()
、LinearSVC()
とRandomForestClassifier()
を含ん私classifier
オブジェクト訓練:に私のベクトラの変換セットを変換するには、しかし
classifier.fit(train_vectors,trainy)
をtrainset
のためにtoarray()
関数を使用しています。私は、プログラムがfeaを持つ100kの例のために大量のメモリ(約4-5GB)各例のサイズ2000のベクトル、すなわち、100,000×2000の特徴ベクトルである。
私は8GBのRAMしか持っていないので、これは私のシステムができる最大のものです。誰かが、どのようにコードを修正することによって、利用可能なメモリを持つトレーニングデータセットの1.6M全体を訓練できるように、どのように進めるかについての提案を与えることができます。私が上記のコードを使ってやろうとすると、実行可能ではない約72ギガのRAMが必要になります。
私はまた、列車の一部を反復的に設定して特定の分類器を漸進的に訓練するための規定があることも理解しています。 MultinomialNB()
やBernoulliNB()
などの分類子には(partial_fit
を使用して)そのための規定がありますが、私が使用している他の分類子もそうでないので、これはオプションではありません。
ありがとうございます!私はこれらの分類器がまばらな配列で動作していることを知らなかった。 GaussianNB()分類器でテストしたので、列車をnumpy配列に変換しなければならなかったので、他の分類器でも同じことをする必要があると暗黙のうちに考えました。GaussianNBを削除すると、疎な配列を作成する必要がなくなり、高密度配列へのfit_transformから得て、私の問題を解決します。 – tedghosh
あなたの質問については、私は2000語のフィーチャーセットを使用すると、私に良い精度を与えることはないことを認識しています。私はアルゴリズムを使って74-77%の範囲で精度を得ていました。しかし、大規模なフィーチャセットを使用するとメモリオーバーフローが発生したため、私は選択肢がありませんでした。しかし、あなたのソリューションは、メモリの問題がなくても大きなフィーチャセットを使用するのに役立ちました。 – tedghosh
完璧、私が助けることができてうれしい。 :) – Matt