La estimación del lazo descrita en la pregunta es el equivalente al multiplicador de lagrange del siguiente problema de optimización:
$${\text{minimize } f(\beta) \text{ subject to } g(\beta) \leq t}$$
$$\begin{align} f(\beta) &= \frac{1}{2n} \vert\vert y-X\beta \vert\vert_2^2 \\ g(\beta) &= \vert\vert \beta \vert\vert_1 \end{align}$$
Esta optimización tiene una representación geométrica de encontrar el punto de contacto entre una esfera multidimensional y un politopo (abarcados por los vectores de X). La superficie del politopo representa $g(\beta)$ . El cuadrado del radio de la esfera representa la función $f(\beta)$ y se minimiza cuando las superficies entran en contacto.
Las imágenes siguientes ofrecen una explicación gráfica. En las imágenes se ha utilizado el siguiente problema sencillo con vectores de longitud 3 (por simplicidad para poder hacer un dibujo):
$$\begin{bmatrix} y_1 \\ y_2 \\ y_3\\ \end{bmatrix} = \begin{bmatrix} 1.4 \\ 1.84 \\ 0.32\\ \end{bmatrix} = \beta_1 \begin{bmatrix} 0.8 \\ 0.6 \\ 0\\ \end{bmatrix} +\beta_2 \begin{bmatrix} 0 \\ 0.6 \\ 0.8\\ \end{bmatrix} +\beta_3 \begin{bmatrix} 0.6 \\ 0.64 \\ -0.48\\ \end{bmatrix} + \begin{bmatrix} \epsilon_1 \\ \epsilon_2 \\ \epsilon_3\\ \end{bmatrix} $$ y minimizamos $\epsilon_1^2+\epsilon_2^2+\epsilon_3^2$ con la restricción $abs(\beta_1)+abs(\beta_2)+abs(\beta_3) \leq t$
Las imágenes lo muestran:
- La superficie roja representa la restricción, un politopo abarcado por X.
- Y la superficie verde representa la superficie minimizada, una esfera.
- La línea azul muestra la trayectoria del lazo, las soluciones que encontramos al cambiar $t$ o $\lambda$ .
- El vector verde muestra la solución OLS $\hat{y}$ (que fue elegido como $\beta_1=\beta_2=\beta_3=1$ o $\hat{y} = x_1 + x_2 + x_3$ .
- Los tres vectores negros son $x_1 = (0.8,0.6,0)$ , $x_2 = (0,0.6,0.8)$ y $x_3 = (0.6,0.64,-0.48)$ .
Mostramos tres imágenes:
- En la primera imagen sólo un punto del politopo toca la esfera . Esta imagen demuestra muy bien por qué la solución del lazo no es sólo un múltiplo de la solución OLS. La dirección de la solución OLS se suma más fuerte a la suma $\vert \beta \vert_1$ . En este caso, sólo un $\beta_i$ es distinto de cero.
- En la segunda imagen una cresta del politopo está tocando la esfera (en dimensiones superiores obtenemos análogos de mayor dimensión). En este caso, múltiples $\beta_i$ son distintos de cero.
- En la tercera imagen una faceta del politopo toca la esfera . En este caso todo el $\beta_i$ son distintos de cero .
La gama de $t$ o $\lambda$ para los que tenemos el primer y tercer caso se pueden calcular fácilmente debido a su sencilla representación geométrica.
Caso 1: Sólo un $\beta_i$ no cero
La parte no nula $\beta_i$ es aquella para la que el vector asociado $x_i$ tiene el mayor valor absoluto de la covarianza con $\hat{y}$ (este es el punto del paralelótopo que más se acerca a la solución OLS). Podemos calcular el multiplicador de Lagrange $\lambda_{max}$ por debajo de la cual tenemos al menos un $\beta$ tomando la derivada con $\pm\beta_i$ (el signo depende de si aumentamos el $\beta_i$ en sentido negativo o positivo ):
$$\frac{\partial ( \frac{1}{2n} \vert \vert y - X\beta \vert \vert_2^2 - \lambda \vert \vert \beta \vert \vert_1 )}{\pm \partial \beta_i} = 0$$
lo que lleva a
$$\lambda_{max} = \frac{ \left( \frac{1}{2n}\frac{\partial ( \vert \vert y - X\beta \vert \vert_2^2}{\pm \partial \beta_i} \right) }{ \left( \frac{ \vert \vert \beta \vert \vert_1 )}{\pm \partial \beta_i}\right)} = \pm \frac{\partial ( \frac{1}{2n} \vert \vert y - X\beta \vert \vert_2^2}{\partial \beta_i} = \pm \frac{1}{n} x_i \cdot y $$
que es igual a la $\vert \vert X^Ty \vert \vert_\infty$ mencionado en los comentarios.
donde debemos notar que esto sólo es cierto para el caso especial en el que la punta del politopo está tocando la esfera ( por lo que no es una solución general aunque la generalización es sencilla).
Caso 3: Todos $\beta_i$ son distintos de cero.
En este caso que una faceta del politopo esté tocando la esfera. Entonces la dirección de cambio de la trayectoria del lazo es normal a la superficie de la faceta particular.
El politopo tiene muchas facetas, con contribuciones positivas y negativas del $x_i$ . En el caso del último paso del lazo, cuando la solución del lazo se acerca a la solución del ols, entonces las contribuciones del $x_i$ debe ser definido por el signo de la solución OLS. La normal de la faceta puede definirse tomando el gradiente de la función $\vert \vert \beta(r) \vert \vert_1 $ el valor de la suma de beta en el punto $r$ que es:
$$ n = - \nabla_r ( \vert \vert \beta(r) \vert \vert_1) = -\nabla_r ( \text{sign} (\hat{\beta}) \cdot (X^TX)^{-1}X^Tr ) = -\text{sign} (\hat{\beta}) \cdot (X^TX)^{-1}X^T $$
y el cambio equivalente de beta para esta dirección es:
$$ \vec{\beta}_{last} = (X^TX)^{-1}X n = -(X^TX)^{-1}X^T [\text{sign} (\hat{\beta}) \cdot (X^TX)^{-1}X^T]$$
que después de algunos trucos algebraicos con el desplazamiento de las transposiciones ( $A^TB^T = [BA]^T$ ) y la distribución de paréntesis se convierte en
$$ \vec{\beta}_{last} = - (X^TX)^{-1} \text{sign} (\hat{\beta}) $$
normalizamos esta dirección:
$$ \vec{\beta}_{last,normalized} = \frac{\vec{\beta}_{last}}{\sum \vec{\beta}_{last} \cdot sign(\hat{\beta})} $$
Para encontrar el $\lambda_{min}$ por debajo del cual todos los coeficientes son distintos de cero. Sólo tenemos que calcular desde la solución OLS hasta el punto en el que uno de los coeficientes es cero,
$$ d = min \left( \frac{\hat{\beta}}{\vec{\beta}_{last,normalized}} \right)\qquad \text{with the condition that } \frac{\hat{\beta}}{\vec{\beta}_{last,normalized}} >0$$
y en este punto evaluamos la derivada (como antes cuando calculamos $\lambda_{max}$ ). Utilizamos que para una función cuadrática tenemos $q'(x) = 2 q(1) x$ :
$$\lambda_{min} = \frac{d}{n} \vert \vert X \vec{\beta}_{last,normalized} \vert \vert_2^2 $$
Imágenes
un punto del politopo está tocando la esfera, un solo $\beta_i$ es distinto de cero:
una cresta (o diferencia en varias dimensiones) del politopo está tocando la esfera, muchos $\beta_i$ son distintos de cero:
una faceta del politopo está tocando la esfera, todas $\beta_i$ son distintos de cero:
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: estas 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
(aviso de edición: esta respuesta se ha editado mucho. He borrado partes antiguas. Pero dejé esta respuesta del 14 de julio que contiene una buena explicación de la separación de $y$ , $\epsilon$ y $\hat{y}$ . Los problemas que se planteaban en esta respuesta inicial se han resuelto. El paso final del algoritmo LARS es fácil de encontrar, es la normal del politopo definido por el signo del $\hat{\beta}$ ) #RESPUESTA JULIO 14 2017#
para $\lambda < \lambda_{max}$ tenemos al menos un coeficiente distinto de cero (y sobre todo son cero)
para $\lambda < \lambda_{min}$ tenemos todo coeficientes no nulos (y por encima al menos un coeficiente es cero)
encontrar $\lambda_{max}$
Puede utilizar los siguientes pasos para determinar $\lambda_{max}$ (y esta técnica también ayudará para $\lambda_{min}$ aunque un poco más difícil). Para $\lambda>\lambda_{max}$ tenemos $\hat{\beta}^\lambda$ = 0, ya que la penalización en el término $\lambda \vert \vert \beta \vert \vert_1$ será demasiado grande, y un aumento de $\beta$ no reduce $(1/2n) \vert \vert y-X \beta \vert \vert ^2_2$ suficientemente para optimizar la siguiente expresión
(1) \begin{equation}\frac{1}{2n} \vert \vert y-X \beta \vert \vert ^2_2 + \lambda \vert \vert \beta \vert \vert_1 \end{equation}
La idea básica es que en algún nivel de $\lambda$ el aumento de $\vert \vert \beta \vert \vert_1$ hará que el término $(1/2n) \vert \vert y-X \beta \vert \vert ^2_2$ a disminuciones más que el término $\lambda \vert \vert \beta \vert \vert_1$ aumenta. Este punto en el que los términos son iguales se puede calcular exactamente y en este punto la expresión (1) puede ser optimizada por un aumento de $\beta$ y este es el punto por debajo del cual algunos términos de $\beta$ son distintos de cero.
- Determinar el ángulo, o vector unitario $\beta_0$ a lo largo de la cual la suma $(y - X\beta)^2$ disminuiría más. (de la misma manera que el primer paso del algoritmo LARS explicado en el muy buen artículo referenciado por chRrr) Esto se relacionaría con la(s) variable(s) $x_i$ que más se correlaciona con $y$ .
- Calcule la tasa de cambio a la que cambia la suma de cuadrados del error si aumenta la longitud del vector predicho $\hat{y}$
$r_1= \frac{1}{2n} \frac{\partial\sum{(y - X\beta_0\cdot s)^2}}{\partial s}$
esto está relacionado con el ángulo entre $\vec{\beta_0}$ y $\vec{y}$ . El cambio del cuadrado de la longitud del término de error $y_{err}$ será igual a
$\frac{\partial y_{err}^2}{\partial \vert \vert \beta_0 \vert \vert _1} = 2 y_{err} \frac{\partial y_{err}}{\partial \vert \vert \beta_0 \vert \vert _1} = 2 \vert \vert y \vert \vert _2 \vert \vert X\beta_0 \vert \vert _2 cor(\beta_0,y)$
El término $\vert \vert X\beta_0 \vert \vert _2 cor(\beta_0,y)$ es lo que la longitud $y_{err}$ cambia según el coeficiente $\beta_0$ cambios y esto incluye una multiplicación con $X$ (ya que el mayor $X$ mayor será el cambio al cambiar el coeficiente) y una multiplicación con la correlación (ya que sólo la parte de la proyección reduce la longitud del vector de error).
Entonces $\lambda_{max}$ es igual a esta tasa de cambio y $\lambda_{max} = \frac{1}{2n} \frac{\partial\sum{(y - X\beta_0\cdot s)^2}}{\partial s} = \frac{1}{2n} 2 \vert \vert y \vert \vert _2 \vert \vert x \vert \vert _2 corr(\beta_0,y) = \frac{1}{n} \vert \vert X\beta_0 \cdot y \vert \vert _2 $
Donde $\beta_0$ es el vector unitario que corresponde al ángulo en el primer paso del algoritmo LARS.
Si $k$ es el número de vectores que comparten la máxima correlación entonces tenemos
$\lambda_{max} = \frac{\sqrt{k}}{n} \vert \vert X^T y\vert \vert_\infty $
En otras palabras. LARS le da la disminución inicial de la SSE a medida que aumenta la longitud del vector $\beta$ y esto es entonces igual a su $\lambda_{max}$
Ejemplo gráfico
La siguiente imagen explica el concepto de cómo el algoritmo LARS puede ayudar a encontrar $\lambda_{max}$ . (y también pistas de cómo podemos encontrar $\lambda_{min}$ )
- En la imagen vemos esquemáticamente el ajuste del vector $y$ por los vectores $x_1$ y $x_2$ .
- Los vectores grises punteados representan la solución OLS con $y_{\perp}$ el parte de $y$ que es perpendicular (el error) al tramo de los vectores $x_1$ y $x_2$ (y el vector perpendicular es la distancia más corta y la menor suma de cuadrados)
- las líneas grises son isolíneas para las que $\vert \vert \beta \vert \vert_1$ es constante
- Los vectores $\beta_0$ y $\beta_1$ representan el camino que se sigue en una regresión LARS.
- las líneas azules y verdes son los vectores que representan el término de error al seguir el algoritmo de regresión LARS. la longitud de estas líneas es el SSE y cuando alcanzan el vector perpendicular $y_{\perp}$ tiene la menor suma de cuadrados
Ahora, inicialmente la trayectoria se sigue a lo largo del vector $x_i$ que tiene la mayor correlación con $y$ . Para este vector el cambio del $\sqrt{SSE}$ en función del cambio de $\vert \vert \beta \vert \vert$ es mayor (es decir, igual a la correlación de ese vector $x_i$ y $y$ ). Mientras sigues el camino este cambio de $\sqrt{SSE}$ / $\vert \vert \beta \vert \vert$ disminuye hasta que un camino a lo largo de una combinación de dos vectores se vuelve más eficiente, y así sucesivamente. Obsérvese que la relación del cambio $\sqrt{SSE}$ y cambiar $\vert \vert \beta \vert \vert$ es una función monótonamente decreciente. Por lo tanto, la solución para $\lambda_{max}$ debe estar en el origen.
encontrar $\lambda_{min} $
La ilustración anterior también muestra cómo podemos encontrar $\lambda_{min}$ el punto en el que todos los coeficientes son distintos de cero. Esto ocurre en el último paso del procedimiento LARS.
Podemos encontrar estos puntos con pasos similares. Podemos determinar el ángulo del último escalón y del anteúltimo y determinar el punto en el que estos escalones pasan de uno a otro. Este punto se utiliza entonces para calcular $\lambda_{min}$ .
La expresión es un poco más complicada ya que no se calcula partiendo de cero. En realidad, la solución puede no existir. El vector a lo largo del cual se realiza el último paso está en la dirección de $X^T \cdot sign$ en el que $sign$ es un vector con 1's y -1's dependiendo de la dirección del cambio del coeficiente en el último paso. Esta dirección se puede calcular si se conoce el resultado del anteúltimo paso (y se podría conseguir iterando hacia el primer paso, pero un cálculo tan grande no parece ser lo que queremos). No encuentro si podemos ver directamente cual es el signo del cambio de los coeficientes en el último paso.
Obsérvese que podemos determinar más fácilmente el punto $\lambda_{opt}$ para lo cual $\beta^\lambda$ es igual a la solución OLS. En la imagen esto está relacionado con el cambio del vector $y_{\perp}$ a medida que avanzamos por la pendiente $\hat{\beta_n}$ (esto podría ser más práctico de calcular)
problemas con los cambios de signo
La solución LARS se acerca a la solución LASSO. La diferencia está en el número de pasos. En el método anterior se averiguaría la dirección del último cambio y se volvería a partir de la solución OLS hasta que un coeficiente se hiciera cero. Se produce un problema si este punto no es un punto en el que se añade un coeficiente al conjunto de coeficientes activos. También podría ser un cambio de signo y las soluciones LASSO y LARS podrían diferir en estos puntos.
0 votos
Esto se afirma y se demuestra en el documento de glmnet: web.stanford.edu/~hastie/Papers/glmnet.pdf
0 votos
@MatthewDrury ¡Gracias por compartir esto! Sin embargo, este documento no parece compartir lo que usted parece sugerir que hacen. En particular, observe que mi $\lambda_\max$ es su $\lambda_\min$ .
0 votos
¿Está seguro de que necesitamos la etiqueta [tuning-parameter]?
0 votos
Eche un vistazo a uno de los primeros "algoritmos" utilizados para resolver el lazo: la regresión de ángulo mínimo. statweb.stanford.edu/~tibs/ftp/lars.pdf (es decir es.wikipedia.org/wiki/Regresión del ángulo máximo ) LARS:Lasso hace exactamente lo que usted busca: Produce la trayectoria completa a trozos calculando los pasos/nudos en los que ocurre algo (la variable entra o sale). Desafortunadamente para ti: se construye en la dirección equivocada, empezando por la solución más escasa y tienes que tener cuidado: el escalado es diferente (comparado con tu función objetivo) pero equivalente.
0 votos
@amoeba He pensado que sería apropiado incluir la etiqueta ya que la pregunta está enfocada a los parámetros de ajuste. ¿Crees que hay otra etiqueta más apropiada? o que no se debería usar ninguna etiqueta? (No me importa borrarla si no encaja bien).
0 votos
@chRrr ¡Gracias por la sugerencia! He jugado un poco con LARS, pero, como mencionas, no parece claro cómo conseguir que ese algoritmo proporcione un cerrado desde para el primer nudo. ¿Quizás estabas sugiriendo que sería útil para el cálculo numérico de este nudo? En ese sentido, estoy de acuerdo en que es importante señalarlo. Gracias.
1 votos
Tienes razón, una forma cerrada para la solución del lazo no existe en general (ver stats.stackexchange.com/questions/174003/ ). sin embargo, lars al menos te dice lo que pasa y bajo qué condiciones exactas/en qué momento puedes añadir/borrar una variable. creo que algo así es lo mejor que puedes conseguir.
1 votos
@chRrr No estoy seguro de que sea del todo justo decir eso: sabemos que $\hat\beta^\lambda = 0$ para $\lambda \geq \frac{1}{n} \|X^t y\|_\infty$ . Es decir, en el caso extremo de que la solución sea 0, tenemos una forma cerrada. Me pregunto si lo mismo ocurre en el caso extremo de que la estimación del lazo sea densa (es decir, sin ceros). De hecho, ni siquiera me interesan las entradas exactas de $\hat\beta_\lambda$ ---sólo si son cero o no.
0 votos
Nota para los futuros lectores: He sustituido todas las apariciones de la notación $\lambda_\max$ con $\lambda_\min$ ahora mismo.
0 votos
Dos comentarios. En primer lugar, si sus variables son ortogonales entre sí, entonces el coeficiente del lazo para $\beta_i^{\lambda} $ es $max(0, \beta - \lambda) $ . Lo cual es una buena respuesta (en mi opinión) en ese caso. En el caso general, el algoritmo LARS determina cuándo un coeficiente de lazo es distinto de cero. Esto se explica en ESL.
0 votos
@aginensky ¡Gracias por el comentario! Tienes razón en que este tipo de cosas se vuelven extremadamente triviales cuando las covariables son ortogonales. También tienes razón en que el algoritmo LARS es una primera idea interesante sobre cómo derivar $\lambda_\min$ ya que el algoritmo puede utilizarse para calcular estos nudos. Sin embargo, no parece claro cómo llevar a cabo esta derivación. Estaría muy interesado si pudiera proporcionar una.
0 votos
@Ben Si usted mira en ELS, en el mismo capítulo que discute el lasso y la cresta, lars se discute. lars proporciona un algo para agregar en la cantidad específica de variables una cierta cantidad a la vez. Creo que Efron lo llamó cresta democrática o algo así. En cualquier caso, si no recuerdo mal, los puntos en los que se cambia la variable que se añade al lars corresponden a las "lambdas" del lasso. Échale un vistazo al libro. No entiendo tu referencia a knows. hth.
0 votos
@aginensky Estoy familiarizado con LARS pero, por desgracia, sigo atascado. Como sugiere tu comentario, cuando $X^T X=I$ (para que las covariables sean ortogonales y escaladas), vemos que $\lambda_\min = \frac{1}{n} \|X^T y\|_\min$ y $\lambda_\max = \frac{1}{n} \|X^T y\|_\max$ . Dado que esta expresión de $\lambda_\max$ es válida para cualquier $X$ (como se muestra en el post enlazado en mi pregunta), esperaba que la expresión para $\lambda_\min$ también lo haría. Sin embargo, al realizar una simulación corta, parece sobreestimar (sistemáticamente) el valor real de $\lambda_\min$
0 votos
¿No es el cálculo hacia atrás del último paso de LASSO, en el algoritmo LARS, un solución cerrada que te encuentra lo más bajo $\lambda$ con un coeficiente cero (ya sea recién activado, o cruzando el cero)?
0 votos
1) El último paso es en la dirección de la normal de la superficie con constante $\vert \beta \vert_1$ , que se puede encontrar tomando el gradiente de esta superficie (o un camino ligeramente diferente en el código que he utilizado). 2) A continuación, calcular de nuevo hasta que un componente se convierte en cero. 3) Y evaluar la relación del cambio de la SSE y $\vert \beta \vert_1$ . 1) $$v = (X \cdot X^T)^{-1} sign(\hat{\beta}) $$ 1b) normalizar $$v_n = \frac{v}{\sum v \cdot sign(\hat{\beta}) }$$ 2) $$d = min(\beta/v>0)$$ 3) $$ \lambda = d* \vert X v \vert_2^2 $$