#はじめに
Lasso回帰をRでやろうと思うと、glmnetを使うのが一般的と思いますが、
これでクロスバリデーションをする時、事前の設定をしないと並列処理になりません。
また、エラー等も出ないので気付きにくいかもしれません。
と言うことで、この対応の備忘録です。
#cv.glmnetのマニュアル確認
glmnet公式ドキュメントをよく見ると、次のように事前に設定が必要と書いてありました。。
parallel
If TRUE, use parallel foreach to fit each fold. Must register parallel before hand, such as doMC or others. See the example below.
しかし、doMCはdoMC公式ドキュメントによると、OSタイプがunixのみと記載されています。
また、並列処理パッケージは、OSの種類問わず使えるdoParallelが普通はよく使われるのではと思います。
ということで、doParallelをmacOSで試しました。結論から言うと問題なく並列処理が実行できました。
他のOSでは試してませんが、多分問題ないのではと思います。
#事前の設定とcv.glmnetの実施
並列処理時に、何コア使うかを事前に登録します。
下記の場合だと、Rが認識できるコア全てを使って並列処理を実行します。
> library(doParallel)
> library(parallel)
> registerDoParallel(detectCores())
その後parallel = Tを設定してcv.glmnetを実行するだけです。
> library(glmnnt)
> cvfit <- cv.glmnet(as.matrix(data1$X), as.matrix(data1$y), parallel = T)
ちなみに、glmnetライブラリのQuickStartExampleで並列処理しようとしてもデータが小さすぎて、並列処理になっているか確かめにくいので、大きなデータを適当に取得して確認するのが良いです。
検証環境
- macOS Mojave 10.14.5
- R 3.6.0
- RStudio 1.2.1335
#参考文献