私gbm
は R でライブラリを使用しており、すべての CPU を使用してモデルに適合させたいと考えています。
gbm.fit(x, y,
offset = NULL,
misc = NULL,...
私gbm
は R でライブラリを使用しており、すべての CPU を使用してモデルに適合させたいと考えています。
gbm.fit(x, y,
offset = NULL,
misc = NULL,...
まあ、原則として、Rでも他の実装でも、GBMの並列実装はあり得ません。その理由は非常に単純です。ブースティング アルゴリズムは定義上、シーケンシャルです。
The Elements of Statistical Learningから引用した次のことを考慮してください。10 (Boosting and Additive Trees)、pp. 337-339 (強調鉱山):
弱分類器とは、誤り率がランダムな推測よりわずかに優れているものです。ブースティングの目的は、繰り返し変更されたバージョンのデータに弱分類アルゴリズムを順次適用することです。これにより、一連の弱分類器 Gm(x)、m = 1、2、. . . 、M. それらすべてからの予測は、加重多数決によって結合され、最終的な予測が生成されます。[...]後続の各分類器は、シーケンス内の前のものによって見逃されたトレーニング観測に集中することを余儀なくされます。
写真の中で (同上、p. 338):
実際、これは、たとえばランダム フォレスト (RF) と比較して、GBM の主な欠点として頻繁に指摘されます。RF では、ツリーが独立しているため、並列に適合させることができます ( bigrf R パッケージを参照)。
したがって、上記のコメント作成者が特定したように、余分な CPU コアを使用してクロス検証プロセスを並列化することが最善の方法です...
私の知る限り、h2oとxgboostの両方にこれがあります。
h2oについては、たとえば、私が引用した2013年の彼らのこのブログ投稿を参照してください
0xdata では、最先端の分散アルゴリズムを構築しています。そして最近、GBM の構築に着手しました。このアルゴリズムは、分散どころか並列化が不可能であることで悪名高いものです。統計学習の要素 II、Trevor Hastie、Robert Tibshirani、および Jerome Friedman の 387 ページに示されているアルゴリズムを構築しました (この投稿の下部に示されています)。アルゴリズムのほとんどは単純な「小さな」数学ですが、ステップ 2.b.ii は「回帰木を目標に合わせる….」と述べています。外側のループ。これが、分散/並列化することにした場所です。
私たちが構築するプラットフォームは H2O であり、以前のブログで説明したように、大規模な並列ベクトル操作を実行することに重点を置いた API があります。また、GBM (およびランダム フォレスト) では、大規模な並列ツリー操作を実行する必要があります。しかし、実際にはツリー操作ではありません。GBM (および RF) は常にツリーを構築します。作業は常にツリーの葉で行われ、特定の葉に分類されるトレーニング データのサブセットの次善の分割点を見つけます。
コードは git にあります: http://0xdata.github.io/h2o/
(編集: レポは現在https://github.com/h2oai/にあります。)
他の並列 GBM 実装は、xgboostにあると思います。その説明は言う
勾配ブースティング フレームワークの効率的な実装である Extreme Gradient Boosting。このパッケージはその R インターフェイスです。このパッケージには、効率的な線形モデル ソルバーとツリー学習アルゴリズムが含まれています。このパッケージは、単一のマシンで自動的に並列計算を実行でき、既存の勾配ブースティング パッケージよりも 10 倍以上高速になる可能性があります。回帰、分類、ランキングなど、さまざまな目的関数をサポートしています。パッケージは拡張可能に作られているため、ユーザーは自分の目的を簡単に定義することもできます。