web-dev-qa-db-ja.com

機械学習とビッグデータ

最初に、私の現在の立場と達成したい目標について説明したいと思います。

私は機械学習を扱う研究者です。これまで、機械学習アルゴリズムとソーシャルネットワーク分析をカバーするいくつかの理論コースを受講してきたため、機械学習アルゴリズムの実装と実際のデータのフィードに役立ついくつかの理論的概念を習得しました。

簡単な例では、アルゴリズムはうまく機能し、実行時間は許容範囲内ですが、PCでアルゴリズムを実行しようとすると、ビッグデータが問題になります。ソフトウェアに関しては、記事から任意のアルゴリズムを実装したり、任意の言語またはIDEを使用して独自に設計したりするのに十分な経験があります(これまで、Eclipse、.NETでMatlab、Javaを使用しました。 )しかし、これまでのところ、インフラストラクチャのセットアップに関する経験はあまりありません。 HadoopやNoSQLデータベースなどについて学び始めましたが、学習時間の制約を考慮すると、どの戦略が最適かわかりません。

最終的な目標は、ビッグデータを分析するための作業プラットフォームをセットアップし、独自の機械学習アルゴリズムの実装に重点を置き、すべてを本番環境にまとめて、ビッグデータを処理することで有用な質問を解決できるようにすることです。 ==

主な焦点は機械学習アルゴリズムの実装であるため、分散処理を考慮せずに、大きなデータをフィードし、独自のアルゴリズムをアップロードし、データを単純に処理するのに十分なCPUリソースを提供する、既存の実行中のプラットフォームがあるかどうかを尋ねたいと思います。

そのようなプラットフォームが存在するかどうかにかかわらず、特定の顧客の要求に合わせてシステム全体を本番環境に移行できるチームで作業できる十分な大きさの画像を取得したいと思います。たとえば、小売業者は毎日の購入を分析したいので、すべての毎日の記録を、カスタムの機械学習アルゴリズムを使用してデータを処理するのに十分な機能を備えたインフラストラクチャにアップロードする必要があります。

上記のすべてを簡単な質問に入れると:機械学習アルゴリズムに主に焦点を当てた実際の問題のカスタムデータマイニングソリューションを設計し、可能であれば既存のインフラストラクチャを使用して本番環境に導入する方法。分散システムを設計します(Hadoopまたはその他のフレームワークを使用)

本やその他の役立つリソースについてのアドバイスや提案をいただければ幸いです。

38
Niko Gamulin

まず第一に、あなたの質問はあなたがビッグデータによって何を意図しているのかをより明確に定義する必要があります。

確かに、ビッグデータはさまざまなサイズの問題を指す流行語です。私はビッグデータを、データサイズまたは計算時間が「ハードウェアの抽象化が壊れてしまう」ほど大きい問題のカテゴリとして定義する傾向があります。つまり、単一の商用マシンでは、計算とメモリに集中的に注意を払わないと計算を実行できません。 。

したがって、それを超えるとデータがビッグデータになるスケールのしきい値は不明確であり、実装に影響されます。アルゴリズムはハードドライブの帯域幅によって制限されていますか?それは記憶に足を踏み入れる必要がありますか?不必要な二次コストを回避しようとしましたか?キャッシュの効率化などに力を入れましたか?.

中規模の大規模な機械学習チャレンジ(最大2億5000万台のコモディティマシン)の実行における数年の経験から、問題が表現されれば、分散インフラストラクチャを必要と思われる多くの問題を実際には単一のコモディティマシンで実行できると強く信じています。正しく。たとえば、小売業者向けの大規模なデータについて言及しているとします。私はこの正確な主題に数年間取り組んできましたが、少し最適化することで、すべての計算を1台のマシンで実行できるようになりました。私の会社は、非常に大規模な小売業者からのすべてのデータの1年間を50 GB以内に保存できる、単純なカスタムデータ形式に取り組んでいます。つまり、1つのコモディティハードドライブで20年の歴史を保持できます。たとえば、次の場所を見ることができます: https://github.com/Lokad/lokad-receiptstream

私の経験から、分散アーキテクチャに頼るのを避けることができるように、アルゴリズムとメモリを最適化することに時間を費やす価値があります。実際、分散アーキテクチャには3倍のコストがかかります。まず第一に、強力な知識要件。次に、コードに大きな複雑さのオーバーヘッドが伴います。最後に、分散アーキテクチャには、かなりの遅延オーバーヘッドが伴います(ローカルマルチスレッド分散を除く)。

開業医の観点からは、特定のデータマイニングまたは機械学習アルゴリズムを30秒で実行できることが、効率の重要な要素の1つです。シーケンシャルであろうと分散型であろうと、一部の計算に10分かかる場合よりも、新しいアイデアをすばやくすばやくテストすることがはるかに複雑になるため、焦点と効率が急速に低下する傾向があることに気付きました。多くの分散フレームワークによって導入されるレイテンシーのオーバーヘッドは、必然的にこの低効率のシナリオに陥るようなものです。

問題の規模が大きくても、1台のマシンで実行できない場合は、独自のフレームワークを構築するのではなく、既製の分散フレームワークを使用することを強くお勧めします。最もよく知られているフレームワークの1つは、ApacheHadoopから利用できるMapReduce抽象化です。 Hadoopは、1万ノードのクラスターで実行できます。これは、おそらく必要以上に多くなります。ハードウェアを所有していない場合は、たとえばAmazonMapReduceを介してHadoopクラスターの使用を「レンタル」できます。

残念ながら、MapReduceの抽象化は、すべての機械学習の計算に適しているわけではありません。機械学習に関する限り、MapReduceは厳格なフレームワークであり、多くの場合、このフレームワークに適応するのは困難または非効率的であることが証明されています。

– MapReduceフレームワークは、それ自体が関数型プログラミングに関連しています。 Mapプロシージャは、各データチャンクに個別に適用されます。したがって、MapReduceフレームワークは、一部のデータチャンクへのMapプロシージャの適用が、前提条件として他のデータチャンクへの同じプロシージャの結果を必要とするアルゴリズムには適していません。言い換えると、MapReduceフレームワークは、異なるデータ間の計算が独立しておらず、特定の年表を課している場合には適していません。

– MapReduceは、マップとreduceステップの単一の実行を提供するように設計されており、反復呼び出しを直接提供しません。したがって、反復処理(期待値最大化(EM)、信念伝搬など)を意味する多数の機械学習の問題には直接適していません。 MapReduceフレームワークでのこれらのアルゴリズムの実装は、ユーザーが複数の反復の結果の取得とスケジューリングを整理するソリューションを設計する必要があることを意味します。これにより、前の反復の削減フェーズが完了した後に各マップの反復が開始され、各マップの反復は次のようになります。前の反復のreduceフェーズによって提供された結果が提供されます。

–ほとんどのMapReduce実装は、本番環境のニーズと堅牢性に対応するように設計されています。その結果、フレームワークの主な関心事は、ハードウェア障害を処理し、計算結果を保証することです。したがって、MapReduceの効率は、これらの信頼性の制約によって部分的に低下します。たとえば、計算結果のハードディスクでのシリアル化は、場合によってはかなりコストがかかることが判明します。

– MapReduceは、非同期アルゴリズムには適していません。

MapReduceフレームワークへの疑問は、より多くの制御と自由がフレームワークユーザーに委ねられている、より豊かな分散フレームワークにつながりましたが、このユーザーにとってはより複雑です。これらのフレームワークの中で、GraphLabとDryad(どちらも計算の直接非巡回グラフに基づく)はよく知られています。

結果として、「ワンサイズですべてに対応」のデータストレージソリューションがないなど、「ワンサイズですべてに対応」のフレームワークはありません。

Hadoopから始めるには、本を見ることができます Hadoop:Tom Whiteによる決定的なガイド

大規模なフレームワークが機械学習の要件にどのように適合するかに興味がある場合は、ここで入手できる私の博士号の第2章(英語)に興味があるかもしれません: http://tel.archives-ouvertes.fr /docs/00/74/47/68/ANNEX/texfiles/PhD%20Main/PhD.pdf

対処したい特定の課題(アルゴリズムのタイプ、データのサイズ、時間とお金の制約など)についてより多くの洞察を提供する場合は、おそらくより具体的な回答を提供できます。

編集:興味深いことが判明する可能性のある別の参照: 機械学習のスケールアップ

27
Matthieu Durut

BigDataを操作するには、いくつかのデータマイニングアルゴリズムを実装する必要があり、最終的にHadoopを使用しました。あなたがMahout( http://mahout.Apache.org/ )に精通しているかどうかはわかりません。MahoutにはすでにHadoopで使用できるいくつかのアルゴリズムがあります。

それでも、独自のアルゴリズムを実装したい場合は、それをHadoopのMapReduceパラダイムに適合させて、良好な結果を得ることができます。これは、人工知能アルゴリズムをMapReduceに適応させる方法に関する優れた本です。

大量のデータセットのマイニング- http://infolab.stanford.edu/~ullman/mmds.html

6
Renata

これは古い質問のようです。ただし、ユースケースを考えると、ビッグデータドメインでの機械学習に焦点を当てた主なフレームワークはMahout、Spark(MLlib)、H2Oなどです。ただし、ビッグデータで機械学習アルゴリズムを実行するには、それらを変換する必要があります。 MapReduceパラダイムに基づく並列プログラムへ。これは主要な(すべてではない)ビッグデータフレームワークの簡単な紹介を提供する素晴らしい記事です。

http://www.codophile.com/big-data-frameworks-every-programmer-should-know/

これがお役に立てば幸いです。

1
Rajeev Singh