La stima del lazo descritta nella domanda è l'equivalente del moltiplicatore di lagrange del seguente problema di ottimizzazione:
minimize f(β) subject to g(β)≤t
f(β)g(β)=12n||y−Xβ||22=||β||1
Questa ottimizzazione ha una rappresentazione geometrica di trovare il punto di contatto tra una sfera multidimensionale e un politopo (attraversato dai vettori di X). La superficie del politopo rappresenta . Il quadrato del raggio della sfera rappresenta la funzione e viene minimizzato quando le superfici entrano in contatto.g(β)f(β)
Le immagini seguenti forniscono una spiegazione grafica. Le immagini hanno utilizzato il seguente semplice problema con vettori di lunghezza 3 (per semplicità per poter fare un disegno):
⎡⎣⎢y1y2y3⎤⎦⎥=⎡⎣⎢1.41.840.32⎤⎦⎥=β1⎡⎣⎢0.80.60⎤⎦⎥+β2⎡⎣⎢00.60.8⎤⎦⎥+β3⎡⎣⎢0.60.64−0.48⎤⎦⎥+⎡⎣⎢ϵ1ϵ2ϵ3⎤⎦⎥
e minimizziamo con il vincoloϵ21+ϵ22+ϵ23abs(β1)+abs(β2)+abs(β3)≤t
Le immagini mostrano:
- La superficie rossa raffigura il vincolo, un politopo attraversato da X.
- E la superficie verde raffigura la superficie minimizzata, una sfera.
- La linea blu mostra il percorso del lazo, le soluzioni che troviamo quando cambiamo o .tλ
- Il vettore verde mostra la soluzione OLS (che è stata scelta come o .y^β1=β2=β3=1 y =x1+x2+x3y^=x1+x2+x3
- I tre vettori neri sono , e .x1=(0.8,0.6,0)x2=(0,0.6,0.8)x3=(0.6,0.64,−0.48)
Mostriamo tre immagini:
- Nella prima immagine solo un punto del politopo tocca la sfera . Questa immagine dimostra molto bene perché la soluzione lazo non è solo un multiplo della soluzione OLS. La direzione della soluzione OLS si aggiunge alla somma . In questo caso, solo un singolo è diverso da zero.|β|1βi
- Nella seconda immagine una cresta del politopo tocca la sfera (in dimensioni superiori otteniamo analoghi di dimensione superiore). In questo caso più sono diversi da zero.βi
- Nella terza immagine una sfaccettatura del politopo tocca la sfera . In questo caso tutti i sono diversi da zeroβi .
L'intervallo di o per cui abbiamo il primo e il terzo caso può essere facilmente calcolato grazie alla loro semplice rappresentazione geometrica.tλ
Caso 1: solo un singolo diverso da zeroβi
Il valore diverso da zero è quello per cui il vettore associato ha il valore assoluto più alto della covarianza con (questo è il punto del parrallelotope che si avvicina alla soluzione OLS). Possiamo calcolare il moltiplicatore di Lagrange sotto del quale abbiamo almeno un diverso da zero prendendo la derivata conβixiy λ m un x β ± β i β iy^λmaxβ±βi (il segno dipende dal fatto che aumentiamo il in direzione negativa o positiva):βi
∂(12n||y−Xβ||22−λ||β||1)±∂βi=0
che porta a
λmax=(12n∂(||y−Xβ||22±∂βi)(||β||1)±∂βi)=±∂(12n||y−Xβ||22∂βi=±1nxi⋅y
che equivale a||XTy||∞ menzionato nei commenti.
dove dovremmo notare che questo è vero solo per il caso speciale in cui la punta del politopo tocca la sfera ( quindi questa non è una soluzione generale , sebbene la generalizzazione sia semplice).
Caso 3: Tuttiβi sono diversi da zero.
In questo caso, una sfaccettatura del politopo tocca la sfera. Quindi la direzione del cambiamento del percorso lazo è normale alla superficie della particolare sfaccettatura.
Il polytope ha molte sfaccettature, con contributi positivi e negativi di . Nel caso dell'ultimo passaggio del lazo, quando la soluzione del lazo è vicina alla soluzione ols, i contributi di devono essere definiti dal segno della soluzione OLS. La normale della faccetta può essere definita prendendo il gradiente della funzione , il valore della somma di beta nel punto , che è:xixi||β(r)||1r
n=−∇r(||β(r)||1)=−∇r(sign(β^)⋅(XTX)−1XTr)=−sign(β^)⋅(XTX)−1XT
e il cambio equivalente di beta per questa direzione è:
β⃗ last=(XTX)−1Xn=−(XTX)−1XT[sign(β^)⋅(XTX)−1XT]
che dopo alcuni trucchi algebrici con spostamento dei trasposi ( ) e la distribuzione delle parentesi diventaATBT=[BA]T
β⃗ last=−(XTX)−1sign(β^)
normalizziamo questa direzione:
β⃗ last,normalized=β⃗ last∑β⃗ last⋅sign(β^)
Per trovare ilλmin sotto il quale tutti i coefficienti sono diversi da zero. Dobbiamo solo tornare dalla soluzione OLS al punto in cui uno dei coefficienti è zero,
d=min(β^β⃗ last,normalized)with the condition that β^β⃗ last,normalized>0
e a questo punto valutiamo la derivata (come prima quando calcoliamo ). Usiamo che per una funzione quadratica abbiamo :λmaxq′(x)=2q(1)x
λmin=dn||Xβ⃗ last,normalized||22
immagini
un punto del politopo tocca la sfera, un singolo è diverso da zero:βi
una cresta (o differire in più dimensioni) del politopo tocca la sfera, molti sono diversi da zero:βi
una sfaccettatura del politopo tocca la sfera, tutti i sono diversi da zero:βi
Esempio di codice:
library(lars)
data(diabetes)
y <- diabetes$y - mean(diabetes$y)
x <- diabetes$x
# models
lmc <- coef(lm(y~0+x))
modl <- lars(diabetes$x, diabetes$y, type="lasso")
# matrix equation
d_x <- matrix(rep(x[,1],9),length(x[,1])) %*% diag(sign(lmc[-c(1)]/lmc[1]))
x_c = x[,-1]-d_x
y_c = -x[,1]
# solving equation
cof <- coefficients(lm(y_c~0+x_c))
cof <- c(1-sum(cof*sign(lmc[-c(1)]/lmc[1])),cof)
# alternatively the last direction of change in coefficients is found by:
solve(t(x) %*% x) %*% sign(lmc)
# solution by lars package
cof_m <-(coefficients(modl)[13,]-coefficients(modl)[12,])
# last step
dist <- x %*% (cof/sum(cof*sign(lmc[])))
#dist_m <- x %*% (cof_m/sum(cof_m*sign(lmc[]))) #for comparison
# calculate back to zero
shrinking_set <- which(-lmc[]/cof>0) #only the positive values
step_last <- min((-lmc/cof)[shrinking_set])
d_err_d_beta <- step_last*sum(dist^2)
# compare
modl[4] #all computed lambda
d_err_d_beta # lambda last change
max(t(x) %*% y) # lambda first change
enter code here
nota: queste ultime tre righe sono le più importanti
> modl[4] # all computed lambda by algorithm
$lambda
[1] 949.435260 889.315991 452.900969 316.074053 130.130851 88.782430 68.965221 19.981255 5.477473 5.089179
[11] 2.182250 1.310435
> d_err_d_beta # lambda last change by calculating only last step
xhdl
1.310435
> max(t(x) %*% y) # lambda first change by max(x^T y)
[1] 949.4353
Scritto da StackExchangeStrike