ビッグデータ設定のために並列/分散方法で線形回帰を実行するにはどうすればよいですか?


13

私は非常に大きな線形回帰問題に取り組んでいます。データサイズが非常に大きいため、それらをマシンのクラスターに格納する必要があります。すべてのサンプルを1台のマシンのメモリ(ディスクも)に集約するには大きすぎます

これらのデータを回帰するために、私は並列アプローチを考えています。つまり、個々のボックスで回帰を実行し、各ベータの統計(おそらく平均または中央値)に基づいてベータを計算します。

これは意味がありますか?もしそうなら、個々のR ^ 2から予想される合計をどのように取得すればよいですか?R2R2

回答:


10

簡潔な答え:

はい、線形回帰の並列実行が行われました。たとえば、Xiangrui Mengら。(2016)Apache Sparkの機械学習用。それが機能する方法は、確率的勾配降下法(SGD)を使用することです。セクション3のコア機能で、著者は次のように述べています。

一般化線形モデルは、ワーカー計算に高速C ++ベースの線形代数ライブラリを使用して、勾配計算を並列化する最適化アルゴリズムによって学習されます。

SGDの動作の例は、ここでの私の回答にあります。確率的勾配降下は、標準勾配降下と比較して、どのように時間を節約できますか?


長い答え:

記法は私が提供したリンクと一致していないことに注意してください。この質問ではマトリックス記法の方が良いと思います。

線形回帰を行うには、

minimize Xβy2

導関数は

2XT(Xβy)

小さなデータ設定では、導関数を設定して直接解くことができます。(例:RでのQR分解)ビッグデータ設定では、データ行列が大きすぎてメモリに格納できず、直接解決するのが難しい場合があります。(私は巨大な行列に対してQR分解やコレスキー分解を行う方法に精通していません)。0X

これを並列化する1つの方法は、反復法を使用することです。確率的勾配降下法では、データのサブセットを使用して勾配を近似できます。(、を使用してデータのサブセットを表す場合、勾配はで近似でき、近似された勾配でを更新できます)。Xsys2XsT(Xsβys)β

さらに、統計の場合、すべてのデータのを並列で計算するか、データのサブセットを使用して近似できます。R2R2

それがどのように機能するかに関する直感(mapreduceパラダイム):

私はサブセットを使用した近似について述べ続けています。これが機能する理由の直観は、次の例で説明できます。1,000億のデータポイントがあり、すべてのデータポイントの平均を計算するとします。このような操作を行うのに非常に長い時間がかかり、さらに、データ全体をメモリに格納できないとします。

私たちにできることは、サブセット、たとえば10億のアイテムを取り、それらの平均を計算することです。このようにして作成された近似は、真実から遠く離れてはなりません(つまり、データ全体を使用)。

並列化するには、100台のコンピューターを使用できます。各コンピューターは、10億のデータポイントの異なるサブセットを取得し、これらの平均を計算します。(一般にMAPステップと呼ばれます)。最後に、これらの100個の数値に対して別の平均を実行します(別名REDUCEステップ)。

「mapreduceパラダイム」が機能する場合とそうでない場合があることに注意してください。この例では、、(と長さが同じであるとます)。一部の反復法、つまり現在の反復が以前の反復結果に依存している場合、並列化が困難です。確率的勾配降下法は、データのサブセットを使用して勾配を近似することにより、この問題を解決します。そして、詳細は@ user20160の答えにあります。mean(<x,y>)=mean(x)+mean(y)yxy

参照:

Xiangrui Meng et al。(2016)。MLlib:Apache Sparkでの機械学習


8

@ hxd1011で述べたように、1つのアプローチは、線形回帰を最適化問題として定式化し、反復アルゴリズム(たとえば、確率的勾配降下法)を使用してそれを解くことです。このアプローチは並列化できますが、2つの重要な質問があります。1)問題をどのようにサブ問題に分割する必要があるか。2)SGDのような最適化アルゴリズムは本質的に逐次的であるとすると、グローバルなソリューションを取得するには、サブ問題のソリューションをどのように組み合わせる必要がありますか?

Zinkevich et al。(2010)複数のマシン間で並列化するための以前のいくつかのアプローチについて説明します。

  • 1)SGDを次のように並列化します。データを複数のマシンに分割します。各ステップで、各ローカルマシンはデータのサブセットを使用して勾配を推定します。すべての勾配推定値は中央マシンに渡され、中央マシンはそれらを集約してグローバルパラメータの更新を実行します。このアプローチの欠点は、ネットワーク通信が大量に必要になるため、効率が低下することです。

  • 2)ローカルマシン間でデータを均等に分割します。各マシンは、バッチソルバーを使用して、データの独自のサブセットについて問題を正確に解決します。ローカルマシンからの最終的なパラメーター推定値が平均化されて、グローバルソリューションが生成されます。このアプローチの利点は、ネットワーク通信がほとんど必要ないことですが、パラメーターの推定値が最適でない可能性があるという欠点があります。

彼らは新しいアプローチを提案します:

  • 3)各ローカルマシンがランダムにデータポイントを描画できるようにします。各マシンでSGDを実行します。最後に、マシン全体のパラメーターを平均して、グローバルなソリューションを取得します。(2)と同様に、この方法ではネットワーク通信はほとんど必要ありません。ただし、各マシンがデータの大部分にアクセスすることを許可されているため、パラメーター推定値はより優れています。

並列化された最適化アプローチは非常に一般的で、多くの機械学習アルゴリズム(線形回帰だけでなく)に適用されます。

別の代替案は、並列/分散行列分解アルゴリズムまたは線形ソルバーを使用することです。最小二乗線形回帰には、行列分解法を使用して解くことができる特別な構造があります。これは、メモリに収まる小さなデータセットの場合に通常解決する方法です。これは、行列のブロックを複数のマシンに分散し、次に並列/分散行列計算を使用して問題を解決することで並列化できます。このアプローチは線形システムの解法により特化しているため、そのパフォーマンスがより一般的な分散最適化アプローチとどのように比較されるかを見るのは興味深いでしょう。誰かがこれについてより多くの情報を提供できるなら、私は聞いてうれしいです。

参照:

Zinkevich et al。(2010)。並列化された確率的勾配降下法。


+1は、私が詳細に説明していない問題に対処するための素晴らしい答えです。
Haitao Du

@ hxd1011 SGDの詳しい説明とOPの問題への接続方法については、+ 1してください
user20160

2

長い、長い、マップ削減の前に私はこれを解決しました。以下は、Journal of Econometrics 1980の私の古い論文を参照しています。これは、並列非線形最尤法用であり、M推定で機能します。

この方法は、回帰に対して正確です。kプロセッサ/ユニットでk個のサブセットにデータを分割します(順次実行することもできます)。k個の回帰は、それぞれの回帰係数とX'X行列を維持します。これらをそれぞれb1、...、bkおよびW1、...、Wkと呼ぶと、全体の回帰係数はb = inverse(W1 + .. + Wk)*(W1 * b1 + ... + Wk * bk)で与えられます。パラメータのbを使用して残差を計算するために別のデータパスが必要であり、sigma ^ 2、推定誤差分散、R ^ 2全体のFなどを取得します。次に、bの共分散行列はsigma ^ 2(inverse(W1 + .. + Wk))によって正確に与えられます。上記の*は行列の乗算を示します。

https://www.sciencedirect.com/science/article/pii/0304407680900950


私が自分の仕事をしたときにあなたの仕事を知っていればいいのに!academic.oup.com/imaiai/article-abstract/5/4/379/...
JohnRos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.