La estimación del lazo descrita en la pregunta es el equivalente multiplicador lagrange del siguiente problema de optimización:
minimize f(β) subject to g(β)≤t
f(β)g(β)=12n||y−Xβ||22=||β||1
Esta optimización tiene una representación geométrica de encontrar el punto de contacto entre una esfera multidimensional y un politopo (abarcado por los vectores de X). La superficie del politopo representa . El cuadrado del radio de la esfera representa la función y se minimiza cuando las superficies entran en contacto.g(β)f(β)
Las imágenes a continuación proporcionan una explicación gráfica. Las imágenes utilizaron el siguiente problema simple con vectores de longitud 3 (por simplicidad para poder hacer un dibujo):
⎡⎣⎢y1y2y3⎤⎦⎥=⎡⎣⎢1.41.840.32⎤⎦⎥=β1⎡⎣⎢0.80.60⎤⎦⎥+β2⎡⎣⎢00.60.8⎤⎦⎥+β3⎡⎣⎢0.60.64−0.48⎤⎦⎥+⎡⎣⎢ϵ1ϵ2ϵ3⎤⎦⎥
y minimizamos con la restricciónϵ21+ϵ22+ϵ23abs(β1)+abs(β2)+abs(β3)≤t
Las imágenes muestran:
- La superficie roja representa la restricción, un politopo atravesado por X.
- Y la superficie verde representa la superficie minimalizada, una esfera.
- La línea azul muestra el camino del lazo, las soluciones que encontramos a medida que cambiamos o .tλ
- El vector verde muestra la solución OLS (que se eligió como o .y^β1=β2=β3=1y^=x1+x2+x3
- Los tres vectores negros son , y .x1=(0.8,0.6,0)x2=(0,0.6,0.8)x3=(0.6,0.64,−0.48)
Te mostramos tres imágenes:
- En la primera imagen, solo un punto del politopo toca la esfera . Esta imagen demuestra muy bien por qué la solución de lazo no es solo un múltiplo de la solución OLS. La dirección de la solución OLS agrega más fuerza a la suma . En este caso, solo un no es cero.|β|1βi
- En la segunda imagen, una cresta del politopo toca la esfera (en dimensiones más altas obtenemos análogos dimensionales más altos). En este caso, múltiples no son cero.βi
- En la tercera imagen, una faceta del politopo está tocando la esfera . En este caso, todos los son distintos de ceroβi .
El rango de o para el que tenemos el primer y el tercer caso se puede calcular fácilmente debido a su representación geométrica simple.tλ
Caso 1: solo un distinto de ceroβi
El distinto de cero es aquel para el que el vector asociado tiene el valor absoluto más alto de la covarianza con (este es el punto del paralelelopopo más cercano a la solución OLS). Podemos calcular el multiplicador de Lagrange debajo del cual tenemos al menos un distinto de cero tomando la derivada con (el signo depende de si aumentamos el en dirección negativa o positiva):βixiy^λmaxβ±βiβi
∂(12n||y−Xβ||22−λ||β||1)±∂βi=0
lo que lleva a
λmax=(12n∂(||y−Xβ||22±∂βi)(||β||1)±∂βi)=±∂(12n||y−Xβ||22∂βi=±1nxi⋅y
que es igual a mencionado en los comentarios.||XTy||∞
donde deberíamos notar que esto solo es cierto para el caso especial en el que la punta del politopo está tocando la esfera ( por lo que esta no es una solución general , aunque la generalización es sencilla).
Caso 3: Todos no son cero.βi
En este caso, una faceta del politopo está tocando la esfera. Entonces, la dirección de cambio de la ruta del lazo es normal a la superficie de la faceta particular.
El politopo tiene muchas facetas, con contribuciones positivas y negativas de . En el caso del último paso del lazo, cuando la solución del lazo está cerca de la solución ols, entonces las contribuciones de deben definirse mediante el signo de la solución OLS. La normalidad de la faceta se puede definir tomando el gradiente de la función , el valor de la suma de beta en el punto , que es:xixi||β(r)||1r
n=−∇r(||β(r)||1)=−∇r(sign(β^)⋅(XTX)−1XTr)=−sign(β^)⋅(XTX)−1XT
y el cambio equivalente de beta para esta dirección es:
β⃗ last=(XTX)−1Xn=−(XTX)−1XT[sign(β^)⋅(XTX)−1XT]
que después de algunos trucos algebraicos con el desplazamiento de las transposiciones ( ) y la distribución de paréntesis se convierte enATBT=[BA]T
β⃗ last=−(XTX)−1sign(β^)
normalizamos esta dirección:
β⃗ last,normalized=β⃗ last∑β⃗ last⋅sign(β^)
Para encontrar el por debajo del cual todos los coeficientes son distintos de cero. Solo tenemos que volver a calcular desde la solución OLS hasta el punto donde uno de los coeficientes es cero,λmin
d=min(β^β⃗ last,normalized)with the condition that β^β⃗ last,normalized>0
, y en este punto evaluamos la derivada (como antes cuando calculamos ). Usamos eso para una función cuadrática tenemos :λmaxq′(x)=2q(1)x
λmin=dn||Xβ⃗ last,normalized||22
Imágenes
un punto del politopo toca la esfera, un solo no es cero:βi
una cresta (o diferencia en varias dimensiones) del politopo está tocando la esfera, muchos no son cero:βi
una faceta del politopo está tocando la esfera, todos no son cero:βi
Ejemplo de código:
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: esas tres últimas líneas son las más importantes
> 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
Escrito por StackExchangeStrike