41

R は、完全にメモリにプルできるデータセットを処理するように設計されているようです。メモリに取り込めない非常に大きなデータセットでの信号処理と機械学習には、どの R パッケージが推奨されますか?

Rがこれを行うための単に間違った方法である場合、私は他の強力な無料の提案を受け入れます(たとえば、非常に大きなデータセットを処理するための良い方法がある場合はscipy)

4

5 に答える 5

32

CRANのハイ パフォーマンス コンピューティング タスク ビューの「Large memory and out-of-memory data」サブセクションを見てください。bigmemoryffは 2 つの人気のあるパッケージです。bigmemory (および関連するbiganalyticsbigtabulate ) については、bigmemory の Web サイトに、Jay Emerson によるいくつかの非常に優れたプレゼンテーション、ビネット、概要があります。ff については、 ff の Web サイトにある Adler Oehlschlägel と同僚の優れたスライド プレゼンテーションを読むことをお勧めします。

また、データをデータベースに保存し、分析のために小さなバッチで読み取ることを検討してください。考慮すべきアプローチはいくつもあります。開始するには、 biglmパッケージのいくつかの例と、Thomas Lumley によるこのプレゼンテーションを参照してください。

また、ハイパフォーマンス コンピューティング タスク ビューで他のパッケージを調査し、他の回答で言及されています。上で言及したパッケージは、私がたまたまより多くの経験を積んだパッケージです。

于 2012-06-20T19:59:02.637 に答える
8

機械学習タスクについては、 biglmパッケージを使用することをお勧めします。これは、「大きすぎてメモリに収まらないデータの回帰」を行うために使用されます。R を非常に大きなデータで使用するには、Hadoopをバックエンドとして使用し、パッケージrmrを使用して、Hadoop クラスターで MapReduce を介して統計 (またはその他の) 分析を実行できます。

于 2012-06-15T18:28:18.360 に答える
8

処理できるデータの量は、何よりもプログラミングのスキルによって制限されると思います。多くの標準機能がメモリ分析に重点を置いていますが、データをチャンクに分割することはすでに非常に役立ちます。もちろん、これは標準の R コードを取得するよりもプログラミングに時間がかかりますが、多くの場合、それはかなり可能です。

データの分割は、データのサブセットの読み取りのみをサポートする read.table または readBin を使用して行うことができます。または、すぐに使用できるアウトオブメモリ機能を提供するパッケージのハイ パフォーマンス コンピューティング タスク ビューを確認することもできます。データをデータベースに入れることもできます。空間ラスター データの場合、優れたラスター パッケージがメモリ不足分析を提供します。

于 2012-06-15T18:08:24.567 に答える
7

それはすべて、必要なアルゴリズムに依存します。それらが増分形式に変換される可能性がある場合(たとえば、ナイーブ ベイズでは、モデル自体と処理中の現在の観測のみをメモリに保持できるなど、任意の時点でデータのごく一部のみが必要な場合)、最良の提案は machine を実行することです。段階的に学習し、ディスクから新しいデータのバッチを読み取ります。

ただし、多くのアルゴリズム、特にその実装では、実際にはデータセット全体が必要です。データセットのサイズがディスク (およびファイル システムの制限) に適合する場合は、ディスク上のファイルをメモリにマップしてプログラムで使用できるmmapパッケージを使用できます。ただし、ディスクへの読み書きにはコストがかかり、R はデータを頻繁に行き来させたい場合があることに注意してください。ので注意してください。

ハード ドライブにもデータを保存できない場合は、分散型機械学習システムを使用する必要があります。そのような R ベースのシステムの 1 つは、非常に大きなデータセットを処理するように設計されたRevolution Rです。残念ながら、これはオープン ソースではなく、かなりの費用がかかりますが、無料のアカデミック ライセンスを取得してみてください。別の方法として、Java ベースのApache Mahoutに興味があるかもしれません。Hadoopに基づいており、多くの重要なアルゴリズムを含む、それほどエレガントではありませんが、非常に効率的なソリューションです。

于 2012-06-16T23:01:06.280 に答える
3

メモリが十分でない場合の解決策の 1 つは、データをディスクにプッシュし、分散コンピューティングを使用することです。RHadoop(R+Hadoop) は、大量のデータセットに取り組むためのソリューションの 1 つかもしれないと思います。

于 2013-03-08T09:57:35.510 に答える