Gegeben , was ist das theoretische Verhalten von LASSO - Koeffizienten und warum?
Würde einer von oder auf oder beide schrumpfen ?
require(glmnet)
x1 = runif(100, 1, 2)
x2 = 2*x1
x_train = cbind(x1, x2)
y = 100*x1 + 100 + runif(1)
ridge.mod = cv.glmnet(x_train, y, alpha = 1)
coef(ridge.mod)
#3 x 1 sparse Matrix of class "dgCMatrix"
# 1
#(Intercept) 1.057426e+02
#x1 9.680073e+01
#x2 3.122502e-15
lasso
multicollinearity
John Hass
quelle
quelle
y = 100*x1 + 100 + runif(100)
, sonst erhalten Sie eine einzelne Zufallszahl, die recycelt und einheitlich zu allen anderen Einträgen hinzugefügt wird.Antworten:
Beachten Sie, dass
Für jeden festen Wert des Koeffizienten gilt die Strafewird minimiert, wenn . Dies liegt daran , die Strafe auf wird zweimal so gewichtet! Um dies in Notation zu setzen,erfüllt für alle . Daher der Lasso-Schätzer | β 1 | +β1+2β2 β 1 = 0 β 1 ˜ β = arg min β|β1|+|β2| β1=0 β1 ~ Β 1=0K β
Wie von Firebug hervorgehoben, ist der Grund, warum Ihre Simulation ein widersprüchliches Ergebnis zeigt, dassx1=x2 (100,0) (0,100) (a,b) argmin a,b≥0 a+b=100
glmnet
die Features automatisch auf die Einheitsvarianz skaliert werden. Das heißt, aufgrund der Verwendung vonglmnet
sind wir effektiv für den Fall, dass . Dort ist der Schätzer nicht mehr eindeutig: und sind beide im min. In der Tat ist für jedes in so dass . ( 100 , 0 ) ( 0 , 100 ) ( a , b ) arg min a , b ≥ 0 a + b = 100Dies erklärt, warum die Simulation insbesondere gefunden . In der Tat ist der zweite Koeffizient unabhängig von der Reihenfolge der Merkmale immer Null.β^2=0
Beweis: Nehmen Sie WLOG an, dass das Feature erfüllt . Der Koordinatenabstieg (der von ) verwendete Algorithmus berechnet für die erste Iteration: gefolgt von wobei . Dann, da ‖ x ‖ 2 = 1 β ( 1 ) 1 = S λ ( x T y ) βx∈Rn ∥x∥2=1
glmnet
glmnet
βquelle
glmnet
Ich bin mir ziemlich sicher, dass die Funktionsskalierung standardmäßig aktiviert ist. So und das gleiche im Modell geworden. x 2ridge.mod=cv.glmnet(x_train,y,alpha=1, standardize = FALSE); coef(ridge.mod)
Wenn ich Ihren Code erneut ausführe, stelle ich fest, dass der Koeffizient von numerisch nicht von Null zu unterscheiden ist.x2
Um besser zu verstehen, warum LASSO diesen Koeffizienten auf Null setzt, sollten Sie sich die Beziehung zwischen LASSO und LAR (Least Angle Regression) ansehen. LASSO kann als LAR mit einer speziellen Modifikation angesehen werden.
Der Algorithmus von LAR sieht ungefähr so aus: Beginnen Sie mit einem leeren Modell (mit Ausnahme eines Abschnitts). Fügen Sie dann die Prädiktorvariable hinzu, die am meisten mit korreliert , z . B. . Ändern Sie den Koeffizienten dieses Prädiktors , bis der Rest gleichermaßen mit und einer anderen Prädiktorvariablen korreliert ist . Ändern Sie dann die Koeffizienten von und bis ein dritter Prädiktor gleichermaßen mit dem Rest usw. .x j β j y - c - x j β j x j x k x j x k x l y - c - x j βy xj βj y−c−xjβj xj xk xj xk xl y−c−xjβj−xkβk
LASSO kann als LAR mit der folgenden Wendung angesehen werden: Sobald der Koeffizient eines Prädiktors in Ihrem Modell (ein "aktiver" Prädiktor) Null erreicht, lassen Sie diesen Prädiktor aus dem Modell fallen. Dies passiert, wenn Sie auf die kollinearen Prädiktoren zurückführen: Beide werden gleichzeitig zum Modell hinzugefügt, und wenn sich ihre Koeffizienten ändern, ändert sich ihre jeweilige Korrelation mit den Residuen proportional, aber einer der Prädiktoren wird gelöscht von der aktiven Menge zuerst, weil sie zuerst Null trifft. Welcher der beiden kollinearen Prädiktoren es sein wird, weiß ich nicht. [EDIT: Wenn Sie die Reihenfolge von und umkehren , können Sie sehen, dass der Koeffizient vonx 1 x 2 x 1y x1 x2 x1 wird auf Null gesetzt. Der glmnet-Algorithmus scheint also einfach zuerst die Koeffizienten auf Null zu setzen, die später in der Entwurfsmatrix geordnet werden.]
Eine Quelle, die diese Dinge ausführlicher erklärt, ist Kapitel 3 in "Die Elemente des statistischen Lernens" von Friedman, Hastie und Tibshirani.
quelle