web-dev-qa-db-ja.com

sklearnおよび大規模なデータセット

22 GBのデータセットがあります。ラップトップで処理したいと思います。もちろん、メモリに読み込むことはできません。

私は多くのsklearnを使用しますが、はるかに小さいデータセットに使用します。

この状況では、古典的なアプローチは次のようになります。

データの一部のみを読み取ります->推定器を部分的にトレーニングします->データを削除します->データの他の部分を読み取ります->推定器をトレーニングし続けます。

一部のsklearnアルゴリズムには、データのさまざまなサブサンプルを使用して推定器をトレーニングできる部分適合法があることがわかりました。

今、私はsklearnでそれをする簡単な理由があるのだろうか?私は次のようなものを探しています

r = read_part_of_data('data.csv')
m = sk.my_model
`for i in range(n):
     x = r.read_next_chunk(20 lines)
     m.partial_fit(x)

m.predict(new_x)

たぶん、sklearnはこれらの種類のものに適したツールではありませんか?お知らせ下さい。

31
Donbeo

Sklearnは大きなデータには適していると思います。選択したアルゴリズムがpartial_fitまたはオンライン学習アプローチをサポートしている場合、順調に進んでいます。知っておくべきことの1つは、チャンクサイズが成功に影響する可能性があることです。

このリンクは役に立つかもしれません... pythonとnumpy、RAMが足りない、ディスクに部分的な結果を保存する方法?

H5pyは便利ですが、すでに震えているツールを使用したいと思うかもしれません。

もう1つできることは、csvファイルに行を保持するかどうかをランダムに選択し、結果を.npyファイルに保存して、ロードを高速化することです。そうすれば、データのサンプリングを取得して、すべてのアルゴリズムでそれを試してみることができます...そして途中で大きなデータの問題に対処します(またはまったくない!時には良いアプローチのサンプルで十分ですあなたが望むものに応じて)。

11
user1269942

コアモデル機能を備えたいくつかのscikit-learn分類器を使用して線形モデルをトレーニングしました。30Gbを超えるKaggleデータセットでの確率勾配、パーセプトロン、パッシブアグレッシブ、および多項単純ベイズです。これらのすべての分類子は、言及したpartial_fitメソッドを共有します。いくつかは他の人よりもうまく動作します。

この投稿の方法論、ケーススタディ、およびいくつかの優れたリソースを見つけることができます: http://www.opendatascience.com/blog/riding-on-large-data-with-scikit-learn/ =

14
Alexis Perrier

DaskまたはGraphlabをご覧ください。

これらはpandasに似ていますが、大規模データで動作します(コア外のデータフレームを使用)。pandasの問題は、すべてのデータがメモリ。

両方のフレームワークをscikit学習で使用できます。 22 GBのデータをDaskまたはSFrameにロードして、sklearnで使用できます。

3
Tuan Vu

統計分析にRではなくPythonを使用することを選択したのは興味深いことですが、そのような大きなデータセットを処理できる形式にデータを入れることから始めます。python h5py パッケージはこの種のストレージに最適です-データへの非常に高速なアクセスを可能にします。適切なサイズでデータをチャンクする必要があります。 x 50,000行が各チャンクをH5ファイルに書き込む次に、実行しているモデルの種類を検討する必要があります(実際には指定していません)。

実際には、データが大きいため、モデルのアルゴリズムと機械学習のクロス検証を作成する必要があります。データを要約するアルゴリズムを書くことから始めて、あなたが何を見ているかを知るようにしてください。次に、実行するモデルを決定したら、相互検証の内容について考える必要があります。データセットの各チャンクに「列」を入れて、各行が属する検証セットを示します。多くの場合、各チャンクに特定の検証セットのラベルを付けることを選択します。

次に、検証サブセットでモデルを実行するために、マップ削減スタイルアルゴリズムを記述する必要があります。別の方法は、各検証セットの各チャンクでモデルを実行し、結果を平均することです(このアプローチの理論的妥当性を考慮してください)。

スパーク、またはRとrhdf5などを使用することを検討してください。これは単なるコーディングの質問ではなくプロジェクトであるため、コードは提供していません。

1
CuriousGeorge