2

まず、昨日pythonから始めました。SciKit と大規模なデータセット (250.000 ツイート) を使用してテキスト分類を実行しようとしています。このアルゴリズムでは、すべてのツイートが 4000 x 1 のベクトルとして表されるため、これは入力が 250.000 行と 4000 列であることを意味します。これをPythonで構築しようとすると、8500回のツイートの後(リストを操作して追加する場合)、メモリが不足し、メモリを事前に割り当てるとエラーが発生します:MemoryError(np.zeros(4000、2500000))。SciKit はこれらの大規模なデータセットを処理できませんか? 私は何か間違ったことをしていますか (Python を使って 2 日目なので)? 私の記憶に収まるように機能を表す別の方法はありますか?

編集:ベルヌーイNBに行きたい

edit2 :オンライン学習で可能かも?ツイートを読んで、モデルにツイートを使用させ、メモリから削除し、別のツイートを読み、モデルに学習させます...しかし、ベルヌーイNBがscikit-learnでオンライン学習を許可しているとは思いません

4

2 に答える 2

7

scikits のベクトライザーを使用する場合 (CountVectorizerまたはTfidfVectorizer最初の試みとして適している場合)、スパース行列表現が得られます。ドキュメントから:

vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X_train = vectorizer.fit_transform(data_train.data)
#initialize your classifier
clf.fit(X_train, y_train)
于 2012-12-06T11:47:00.983 に答える
3

これらの 4000 x 1 ベクトルは、bag-of-words 表現であると想定しています。その場合、250000 × 4000 の行列には多くのゼロがあります。これは、各ツイートに含まれる単語が非常に少ないためです。この種の行列は疎行列と呼ばれ、メモリに効率的に格納する方法があります。開始する疎行列については、 Scipy のドキュメントSciKitのドキュメントを参照してください。これらのリンクを読んだ後にさらにヘルプが必要な場合は、再度投稿してください。

于 2012-12-06T10:27:44.203 に答える