キャレットを使ってxgboostのモデルフィッティングプロセスを並列化したいと思っています。 xgboostのdocumentationで見たことから、nthread
パラメータは、モデルをフィッティングする際に使用するスレッドの数を制御し、並列にツリーを構築します。キャレットのtrain
関数は、例えばk倍CVで反復ごとにプロセスを実行するという意味で並列化を実行します。それがそのパラメータを渡すように、コアの数は、(例えば、doMC
パッケージとregisterDoMC
機能付き)、キャレットの列車の機能を経由してnthread=1
を設定登録xgboostとキャレットを使った並列処理
- :はい、それはに優れている場合は、この理解は正しいですxgboostに設定し、
allowParallel=TRUE
をtrainControl
に設定し、caret
が相互検証のための並列化を処理するようにします。または - キャレット並列化(
allowParallel=FALSE
およびパラレルバックエンド登録なし)を無効にし、nthread
を物理コアの数に設定すると、並列化は排他的にxgboost内に含まれます。
また、並列化を実行する「良い」方法はありませんか?
編集:私はtuneLength = 10
とsearch="random"
で、@topepoによって提案されたコードを実行し、(そうでなければ、私はxgboostは、マルチスレッドを使用することを理解して)最後の行にnthread=1
を指定します。私が得た結果があります。
xgb_par[3]
elapsed
283.691
just_seq[3]
elapsed
276.704
mc_par[3]
elapsed
89.074
just_seq[3]/mc_par[3]
elapsed
3.106451
just_seq[3]/xgb_par[3]
elapsed
0.9753711
xgb_par[3]/mc_par[3]
elapsed
3.184891
終わりに、それは私のデータのためにと、このテストケースの両方に対して、キャレットが並列化を処理させることは、ランタイムの点では良い選択だったことが判明しました。
、これらのオプションは相互に排他的でなければならない理由はありません。それにもかかわらず、問題は意見に基づいており、私は閉じることに投票しています。あなたは「より良い」を定義していません。しかし、私はあなたが少ない実行時間を意味すると仮定します...あなたはいつもあなたのコードをプロファイルすることができます。私は 'ライブラリ(マイクロベンチマーク)'を提案します。 –
多分、用語の誤解があります。もちろん、クロスバリデーションの最終目標はモデルの検証ですが、「モデルフィッティング」の意味は、各繰り返しでモデルを(k-1)の折り目に合わせなければならないということです。この質問の理由は、構築上、並列化を行う理論的に優れた方法があるかどうかわかりません(リサンプリングループを並列化するよりも、反復ごとにスレッドを多く生成するオーバーヘッドが増えるなど)経験豊富な人がこれに助言することができます。しかし、これは大文字と小文字に依存する可能性があります。 – drgxfs