Warum ist Lasso in Matlab viel langsamer als Glmnet in R (10 min gegenüber ~ 1 s)?

9

Ich habe festgestellt, dass die Funktion Lasso in MATLAB relativ langsam ist. Ich habe viele Regressionsprobleme mit normalerweise 1 bis 100 Prädiktoren und 200 bis 500 Beobachtungen. In einigen Fällen erwies sich Lasso als extrem langsam (um ein Regressionsproblem zu lösen, dauerte es einige Minuten). Ich entdeckte, dass dies der Fall war, wenn die Prädiktoren stark korreliert waren (z. B. Lufttemperatur-Zeitreihen an benachbarten Gitterpunkten eines atmosphärischen Modells).

Ich habe die Leistungen des folgenden Beispiels in matlab und in R verglichen.

y ist der Prädiktorenvektor mit 163 Elementen (die Beobachtungen darstellen) und x ist die Prädiktormatrix mit 100 Zeilen und 163 Beobachtungen, die den Beobachtungen in y entsprechen. Ich habe die MATLAB-Funktion Lasso wie folgt angewendet:

[beta_L,stats]=lasso(x,y,'cv',4);

Das gleiche in R mit glmnet:

fit.lasso=cv.glmnet(predictor.ts,predictand.ts,nfolds=4)

Sowohl MATLAB als auch R basieren auf einem Algorithmus für den Koordinatenabstieg. Der Standardwert für die Anzahl der Lambda-Werte ist 100 für Lasso und Glmnet. Die Konvergenzschwelle für den Koordinatenabstieg beträgt in Matlab standardmäßig 10 ^ -4 und in R (10 ^ -7) sogar noch weniger.

Die R-Funktion dauert auf meinem Computer eine Sekunde. Matlab dauert mehrere Minuten, wobei der größte Teil der Rechenzeit im Algorithmus für den Koordinatenabstieg verbracht wird.

Wenn die Prädiktoren weniger korreliert sind (z. B. verschiedene Variablentypen eines numerischen atmosphärischen Modells), ist das Lasso in Matlab nicht so langsam, dauert aber immer noch ~ 30 - verglichen mit ~ 1 s in R).

Ist Matlab Lasso wirklich viel ineffizienter als glmnet oder vermisse ich etwas?

Marlis Hofer
quelle
Predictor.ts sollte durch x und Predictand.ts durch y ersetzt werden ...
Marlis Hofer
Am besten den Matlab glmnet - Anschluss aus installieren web.stanford.edu/~hastie/glmnet_matlab - es nutzt alle Arten von Rechentricken zu beschleunigen Basiskoordinaten Abstieg algo (zB schnelles Feature Screening - Strategien).
Tom Wenseleers

Antworten:

6

glmnetλ1,λmλ1λ2λ2λ3(n+1)n

glmnetλ?glmnetlambda

WARNUNG: Vorsichtig verwenden. Geben Sie keinen einzigen Wert für Lambda an [...] Geben Sie stattdessen eine abnehmende Folge von Lambda-Werten an. glmnetverlässt sich auf seine Erwärmungsstarts für Geschwindigkeit und es ist oft schneller, einen ganzen Pfad zu passen, als eine einzelne Anpassung zu berechnen.

λλ

einar
quelle
2
Wenn Sie sich zur schnellen Überprüfung die Referenzen in der Matlab-Dokumentation im Vergleich zur glmnetVignette ansehen , handelt es sich bei allen um dieselben Autoren (Friedman, Hastie, Tibshirani usw.), mit der Ausnahme, dass glmnetalle Artikel aktueller sind und pathweise Algorithmen verwenden. Darüber hinaus wird das glmnetPaket von denselben Autoren verwaltet, sodass Sie möglicherweise erwarten können, dass es ohnehin eine bessere Leistung als die Mathworks-Version erbringt. Es gibt jedoch auch eine Matlab-Version glmnetvon Junyang Qian, die Ihren Zwecken entspricht.
Chris Haug