MATLABの関数lassoは比較的遅いことがわかりました。私は多くの回帰問題を実行しますが、通常は1から100の予測子と200から500の観測です。場合によっては、投げ縄が非常に遅いことが判明しました(回帰問題を解決するには数分かかりました)。これは、予測子が高度に相関している場合(たとえば、大気モデルの隣接するグリッドポイントでの気温時系列)であることがわかりました。
以下の例のパフォーマンスをmatlabとRで比較しました。
yは163要素(観測値を表す)の予測ベクトルであり、xは100行の予測子行列であり、yの観測値に対応する163観測値です。以下のように、MATLAB関数lassoを適用しました。
[beta_L,stats]=lasso(x,y,'cv',4);
Rでも同じで、glmnetを使用します。
fit.lasso=cv.glmnet(predictor.ts,predictand.ts,nfolds=4)
MATLABとRはどちらも座標降下アルゴリズムに基づいています。lassoとglmnetの両方のラムダ値の数のデフォルト値は100です。座標降下の収束しきい値は、MATLABでは既定で10 ^ -4であり、R(10 ^ -7)ではさらに低くなっています。
私のコンピューターではR関数が1秒かかります。Matlabは数分かかりますが、ほとんどの計算時間は座標降下アルゴリズムで費やされます。
予測子の相関性が低い場合(数値大気モデルのさまざまな変数タイプなど)、Matlabの投げ縄はそれほど遅くはありませんが、Rの1秒に比べて〜30秒かかります)。
matlab lassoは本当にglmnetよりも非効率的ですか、それとも何かを見逃していますか?