2

私は数学者であり、時々統計/機械学習分析のコンサルティングプロジェクトを行っています。私がアクセスできるデータは通常、最大で数百メガバイト(ほとんどの場合ははるかに少ない)の小さい側にありますが、ギガバイト/テラバイトスケールでのデータの処理と分析について詳しく知りたいと思います。私は何を知る必要があり、そこから学ぶためのいくつかの良いリソースは何ですか?

  1. Hadoop/MapReduceは明らかなスタートの1つです。
  2. 私が習得すべき特定のプログラミング言語はありますか?(私は現在、主にPython、Ruby、R、そして時にはJavaで作業していますが、CとClojureは大規模なデータ分析によく使用されているようです?)
  3. ビッグデータに関連していることを除けば、私はNoSQLの動き全体に精通していません。それについて学ぶのに適した場所はどこですか?また、私が精通している必要がある特定の実装(Cassandra、CouchDBなど)はありますか?
  4. 大量のデータに機械学習アルゴリズムを適用する方法については、どこで学ぶことができますか?私の数学のバックグラウンドは主に理論の側面にあり、数値や近似の側面ではありません。標準のMLアルゴリズムのほとんどは実際にはスケーリングしないと思います。
  5. 学ぶべきことに関する他の提案は素晴らしいでしょう!
4

3 に答える 3

2
  1. Apache Hadoop は、無料で大規模なコミュニティがあり、セットアップが簡単であるため、確かに良いスタートです。
  2. Hadoop は Java で構築されているため、これが最適な言語になる可能性があります。ただし、Hadoop で他の言語を使用することもできます (「パイプ」と「ストリーム」)。たとえば、Pythonがよく使用されることは知っています。
  3. 必要に応じて、データベースにデータを保持することを避けることができます。もともと、Hadoop は (分散) ファイル システム上のデータを処理します。しかし、すでにご存知のように、Hadoop 用の分散データベースが利用可能です。
  4. Mahoutを見たことがありますか?それはあなたにとってヒットになると思います;-) あなたが必要とする多くの作業は、すでに行われているかもしれません!?
  5. クイック スタートを読んで、独自の (疑似分散?) クラスターをセットアップし、 word-count exampleを実行します。

ご不明な点がございましたら、お知らせください :-) コメントでこの質問を思い出させていただきます。

于 2010-05-31T22:58:11.870 に答える
0

私はいくつかの大規模な機械学習 (3 ~ 5 GB のデータセット) を行ったので、いくつかの洞察を以下に示します。

まず、大規模なロジスティクスの問題があります。すべてのデータをメモリにロードできますか? Java と 64 ビット JVM を使用すると、持っている RAM と同じ量にアクセスできます。たとえば、コマンド ライン パラメーター-Xmx8192Mを使用すると、8GB にアクセスできます (十分な容量がある場合)。Java アプリケーションである Matlab も、この利点を活用して、かなり大きなデータセットを処理できます。

さらに重要なのは、データに対して実行するアルゴリズムです。標準的な実装では、メモリ内のすべてのデータが必要になる可能性があります。データをディスクにスワップインおよびスワップアウトし、一度にデータの一部のみを処理するワーキング セットアプローチを自分で実装する必要がある場合があります。これらは、コンテキストに応じて、チャンキングバッチ、またはインクリメンタルアルゴリズムと呼ばれることもあります。

多くのアルゴリズムが実際にはスケーリングしないと考えるのは正しいので、おおよその解決策を探す必要があるかもしれません。幸いなことに、ほぼすべてのアルゴリズムについて、近似を扱ったり、大規模なソリューションについて議論したりしている研究論文を見つけることができます。悪いニュースは、ほとんどの場合、これらのアプローチを自分で実装する必要があることです。

于 2010-05-30T11:53:09.657 に答える
0

Hadoop は優れていますが、セットアップが面倒な場合があります。これは、Hadoop のセットアップに関して私が読んだ中で最高の記事です。強くお勧めします: http://www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_%28Single-Node_Cluster%29

Clojure は Java の上に構築されているため、Java よりも高速になる可能性はほとんどありません。ただし、共有メモリを適切に処理する数少ない言語の 1 つであり、役立つ場合とそうでない場合があります。私は数学の専門家ではありませんが、ほとんどの数学計算は非常に並列化可能であり、メモリを共有するスレッドはほとんど必要ないようです。いずれにせよ、Clojure の統計計算ライブラリである Incanter と、Hadoop ジョブの作成の負担を大幅に軽減するclojure-hadoopを確認することをお勧めします。

言語に関しては、パフォーマンスの違いが一定の要因になってしまうことがわかりました。好きな言語を見つけて、アルゴリズムの改善に専念する方がはるかに良いでしょう。ただし、Peter Norvig が引用したいくつかの銃撃戦によると(カラフルな表までスクロールしてください。Python と Perl は配列が下手なので、避けた方がよいかもしれません。

一言で言えば、NoSQL は非構造化/任意の構造化データに最適ですが、SQL/RDBMS は構造化データに最適 (または少なくとも許容範囲) です。RDBMS でのフィールドの変更/追加はコストがかかるため、それが頻繁に発生する場合は、避けた方がよいでしょう。

ただし、あなたの場合、定期的に質問するデータを周りに置くのではなく、大量のデータをバッチ処理してから回答を返すように思われますか? おそらく、Hadoop で CSV/テキスト ファイルを処理するだけで済みます。その場でデータに関する任意の情報にアクセスするためのパフォーマンスの高い方法が必要でない限り、SQL または NoSQL が役立つかどうかはわかりません。

于 2010-08-10T16:47:35.117 に答える