問題タブ [domc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - dopar glmnet が静かに失敗する
私はglmnet
いくつかのモデルに適合させるために使用しており、 の相互検証を行っていlambda
ます。私はcv.glmnet
デフォルトで使用しています (内部的に完全な相互検証を行うlambda
ため) が、以下では、問題を引き起こしている関数の最初のステップに焦点を当てています。
最初のデータ設定。再現可能な例を作成しておらず、生データを共有することはできませんが、dim(smat)
およそ 470 万行 x 50 列で、その約半分が密集しています。完全にランダムな列で問題を再現する単純なアプローチを試みましたが、役に立ちませんでした。
cv.glmnet
以下は、に渡す前の動作を調整したバージョンですcv.lognet
。
これは正常に動作しているように見えますが、かなり遅いです。これを の同等のバージョンに置き換えるとparallel = TRUE
:
一部のglmnet
ノードで呼び出しがサイレントに失敗します (これと比較しany(sapply(train_models, is.null))
てFALSE
):
どのタスクが失敗するかは一貫していません (したがって、たとえばcv_grp = 2
それ自体の問題ではありません)。の出力をキャプチャして無駄glmnet
にチェックしようとしました。フラグis.null
も追加しましたが、疑わしいものは何もありません。構文は補助的なものであることに注意してください。これは、 のデフォルトの動作 (これも同様の失敗につながります) は、トレーニング セットとテスト セットを分割するために使用することに依存しているためです。.verbose = TRUE
foreach
data.table
cv.glmnet
which = foldid == i
この問題をデバッグするにはどうすればよいですか? 並列化するとタスクが失敗する可能性があるのはなぜですか?
環境に関する現在の情報:
r - foreach と「マルチコアの種類」のバックエンドで進行状況バーを取得することは可能ですか?
foreachとdoMCバックエンドを使用して「マルチコア」並列処理を使用している間(調べた時点で doMC を使用しているため、他のパッケージではログを記録できませんでした。進行状況パッケージを使用して進行状況バーを取得したいのですが、進行状況 (これは Linux 端末で動作します (つまり、tcltk ポップアップはありません)。
フォークを使用していることを考えると、不可能かもしれないと想像できますが、よくわかりません。
使用目的は、連結された数百のファイルを並行してロードするときの進行状況を示すことです (通常は #!Rscript 内)。
R で「foreach()」関数を使用するときにプログレス バーを作成するにはどうすればよいですか?のようないくつかの投稿を見てきました。. これに報奨金を授与できてうれしいです。
編集
方法を教えてくれた人に 500 ポイントの報奨金を提供
- foreach とマルチコア (フォーク) タイプの並列処理を使用する
- プログレスバーを取得する
- futile.logger を使用してログを取得する
リプレックス
望ましい出力
プログレスバーが印刷行で台無しにされないことに注意してください)
編集2
報奨金が終了した後、期待される結果に近づくものは何もありません。
プログレスバー内でログを記録すると、すべてが台無しになります。誰かが正しい結果を得た場合、私は別の結果ベースの報奨金を差し上げます。