MATLABのlassoがRのglmnetよりもはるかに遅いのはなぜですか(10分から1秒まで)。


9

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よりも非効率的ですか、それとも何かを見逃していますか?


predictor.tsはxに置き換え、
predictand.tsは

入手できるMatlabのglmnetポートにインストールするのが最善web.stanford.edu/~hastie/glmnet_matlabを -それは降下アルゴ(戦略をスクリーニングなどの高速機能)座標の基本的なスピードアップするために、計算のトリックのすべての種類を使用しています。
Tom Wenseleers、

回答:


6

glmnetλ1λメートルλ1λ2λ2λ+1

glmnetλ?glmnetlambda

警告:注意して使用してください。ラムダに単一の値を指定しないでください[...]代わりに、ラムダ値の減少するシーケンスを指定します。glmnetウォームスタートは速度に依存し、多くの場合、単一の近似を計算するよりもパス全体を近似する方が高速です。

λλ


2
簡単なチェックとして、Matlabのドキュメントの参照とglmnetビネットを比較すると、すべての著者が同じです(Friedman、Hastie、Tibshiraniなど)。ただし、glmnet論文はすべて最新で、パスワイズアルゴリズムを使用しています。さらに、glmnetパッケージは同じ作者によって管理されているため、いずれにしても、Mathworksのバージョンよりもパフォーマンスが優れていることを期待できます。ただし、glmnetJunyang Qianによって管理されているのMatlabバージョンも存在し、目的に合う場合があります。
Chris Haug
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.