Tut mir leid, wenn diese Frage etwas grundlegend ist.
Ich möchte die LASSO-Variablenauswahl für ein Modell mit mehreren linearen Regressionen in R verwenden. Ich habe 15 Prädiktoren, von denen einer kategorisch ist (wird das ein Problem verursachen?). Nach dem Setzen von und ich die folgenden Befehle:y
model = lars(x, y)
coef(model)
Mein Problem ist, wenn ich benutze coef(model)
. Dies gibt eine Matrix mit 15 Zeilen zurück, wobei jedes Mal ein zusätzlicher Prädiktor hinzugefügt wird. Es gibt jedoch keinen Vorschlag, welches Modell gewählt werden soll. Habe ich etwas verpasst Gibt es eine Möglichkeit, mit dem LARS-Paket nur ein " bestes " Modell zurückzugeben?
Es gibt andere Beiträge, die glmnet
stattdessen die Verwendung vorschlagen, aber dies scheint komplizierter zu sein. Ein Versuch ist wie folgt, wobei das gleiche und . Habe ich hier etwas verpasst ?: y
cv = cv.glmnet(x, y)
model = glmnet(x, y, type.gaussian="covariance", lambda=cv$lambda.min)
predict(model, type="coefficients")
Der letzte Befehl gibt eine Liste meiner Variablen zurück, die Mehrheit mit einem Koeffizienten, obwohl einige = 0 sind. Ist dies die richtige Wahl des von LASSO ausgewählten " besten " Modells? Wenn ich dann ein lineares Modell mit all meinen Variablen anpasse, die Koeffizienten hatten, not=0
erhalte ich sehr ähnliche, aber leicht unterschiedliche Koeffizientenschätzungen. Gibt es einen Grund für diesen Unterschied? Wäre es akzeptabel, das lineare Modell mit diesen von LASSO gewählten Variablen nachzurüsten und dies als mein endgültiges Modell zu verwenden? Ansonsten sehe ich keine p-Werte für die Signifikanz. Habe ich etwas verpasst
Tut
type.gaussian="covariance"
Stellen Sie sicher, dass glmnet
mehrere lineare Regressionen verwendet werden.
Hat die automatische Normalisierung der Variablen überhaupt Einfluss auf die Koeffizienten? Gibt es eine Möglichkeit, Interaktionsbegriffe in ein LASSO-Verfahren einzubeziehen?
Ich möchte dieses Verfahren eher als Demonstration dafür verwenden, wie LASSO verwendet werden kann, als für jedes Modell, das tatsächlich für wichtige Schlussfolgerungen / Vorhersagen verwendet wird, wenn dies etwas ändert.
Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen. Über allgemeine Kommentare zu LASSO / lars / glmnet würden wir uns ebenfalls sehr freuen.
quelle
Antworten:
Die Bedienung
glmnet
ist dank der hervorragenden Vignette unter http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html sehr einfach (Sie können auch die CRAN-Paketseite überprüfen). Für das beste Lambdaglmnet
gilt die Faustregelstatt
lambda.min
.Um dasselbe für
lars
Sie zu tun, müssen Sie es von Hand tun. Hier ist meine LösungDenken Sie daran, dass dies nicht genau dasselbe ist, da dies an einem Lassoknoten (wenn eine Variable eintritt) statt an einem beliebigen Punkt endet.
Bitte beachten Sie, dass dies
glmnet
das bevorzugte Paket ist, das derzeit aktiv gewartet wirdlars
und dass bereits Fragen zuglmnet
vslars
beantwortet wurden (die verwendeten Algorithmen unterscheiden sich).Was Ihre Frage der Verwendung von Lasso zur Auswahl von Variablen und zur Anpassung an OLS betrifft, so ist dies eine anhaltende Debatte. Google für OLS post Lasso und es gibt einige Artikel, die sich mit dem Thema befassen. Sogar die Autoren der Elemente des statistischen Lernens geben zu, dass dies möglich ist.
Bearbeiten : Hier ist der Code, um genauer zu reproduzieren, was in
glmnet
tutlars
quelle
Ich komme vor einiger Zeit auf diese Frage zurück, da ich glaube, die richtige Lösung gefunden zu haben.
Hier ist eine Replik, die den mtcars-Datensatz verwendet:
'variables' gibt Ihnen die Liste der Variablen, die die beste Lösung lösen.
quelle
nfolds=5
und gewählt habenalpha=0.5
?Vielleicht hilft der Vergleich mit der schrittweisen Regression der Vorauswahl (siehe den folgenden Link zu einer Website eines der Autoren http://www-stat.stanford.edu/~tibs/lasso/simple.html). Dies ist der in Kapitel 3.4.4 der Elemente des statistischen Lernens verwendete Ansatz (kostenlos online verfügbar). Ich dachte, dass Kapitel 3.6 in diesem Buch dazu beitrug, die Beziehung zwischen den kleinsten Quadraten, der besten Teilmenge und dem Lasso (plus einige andere Verfahren) zu verstehen. Ich finde es auch hilfreich, die Transponierte des Koeffizienten t (coef (model)) und write.csv zu nehmen, damit ich sie in Excel zusammen mit einer Kopie des Plots (model) an der Seite öffnen kann. Sie können nach der letzten Spalte sortieren, die die Schätzung der kleinsten Quadrate enthält. Dann können Sie deutlich sehen, wie jede Variable bei jedem Stückschritt hinzugefügt wird und wie sich die Koeffizienten dadurch ändern. Natürlich ist das nicht die ganze Geschichte, aber es wird hoffentlich ein Anfang.
quelle
lars
undglmnet
arbeiten auf Rohmatrizen. Um Interaktionsterme einzuschließen, müssen Sie die Matrizen selbst konstruieren. Das bedeutet eine Spalte pro Interaktion (bei Faktoren pro Ebene pro Faktor). Sehen Sie nachlm()
, wie es funktioniert (Warnung: Es gibt Drachen).Tut es jetzt, so etwas wie: Um eine Interaktion Begriff manuell zu machen, man könnte (aber vielleicht sollte nicht , weil es langsam ist) zu tun:
Dann, um dies in lars zu verwenden (vorausgesetzt, Sie haben einen
y
Kick um):Ich wünschte, ich könnte Ihnen bei den anderen Fragen weiterhelfen. Ich habe diese gefunden, weil Lars mir Kummer bereitet und die Dokumentation darin und im Internet sehr dünn ist.
quelle
model.matrix()
.LARS löst den GESAMTEN Lösungspfad. Der Lösungsweg ist stückweise linear - es gibt eine endliche Anzahl von "Kerben" -Punkten (dh Werte des Regularisierungsparameters), bei denen sich die Lösung ändert.
Die Matrix der Lösungen, die Sie erhalten, sind also alle möglichen Lösungen. In der Liste, die zurückgegeben wird, sollten auch die Werte des Regularisierungsparameters angegeben werden.
quelle