ENMevalについて

maxentで使われるRパッケージにENMevalがある。ENMevalのバックエンドにはmaxnetを使われていて、さらにmaxnetのバックエンドにはglmnetが使われている。

 

ENMevalには正則化に関わるパラメタrm(regularization multipier。maxnetでいうとregmultという引数のこと)があり、さらに、バックエンドのmaxnet内(より正確にはglmnet内)でもL1正則化に関わるパラメタlambdaがある(https://glmnet.stanford.edu/articles/glmnet.html)。そのlambdaはglmnet内でfeature typeごとに異なるlambdaが設定されている(らしい:which regularization multiplier was used?)。

 

要は、ENMevalの損失関数が、対数尤度関数 + rm * (feature typeごとに異なるlambda * 係数)という構造になっている(たぶん)。

 

rmもlambdaもハイパーパラメタなので、CVで適した値を決定しなくてはいけない。lambdaの方はglmnet内で10-fold CVで決めている(glmnet::glmnetの内部演算で使われているcv.glmnetのデフォのn_foldsが10なので)。んでデフォだと、200個のlambdaに対して10-fold CVっと。

 

rmの方はENMevalでCVの設定をすればよい。ただ、rmを複数検討する意義があまりつかめず。rmって罰則項全体にかかっているパラメタだし、広域探索を担当しているのだと思う。いくつかのデータで試してみたら、rm = 1の時点でlambdaのaucがほとんど改善されることはなかったしなあ。ひとまずrm = 1でええんとちゃうんかな。