LoginSignup
7
3

More than 3 years have passed since last update.

cv.glmnetで並列処理するために必要な設定

Last updated at Posted at 2019-07-18

はじめに

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

参考文献

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3