Estoy implementando la Regresión de Ridge en un módulo Python / C, y me he encontrado con este "pequeño" problema. La idea es que quiero muestrear los grados efectivos de libertad más o menos equidistantes (como el gráfico de la página 65 en los "Elementos de aprendizaje estadístico" ), es decir, muestra:
d f ( λ min ) = p λ max = ∑ p i d 2 i / c λ max ≫ d 2 i c c = 0.1 λ min = 0
Como sugiere el título, entonces, necesito muestrear de a en alguna escala tal que se muestree (aproximadamente), digamos, en intervalos de a ... ¿hay una manera fácil de hacer esto? Pensé en resolver la ecuación para cada usando un método Newton-Raphson, pero esto agregará demasiadas iteraciones, especialmente cuando es grande. ¿Alguna sugerencia?λ min λ max d f ( λ ) 0.1 c p d f ( λ ) λ p
ridge-regression
Néstor
fuente
fuente
Respuestas:
Esta es una respuesta larga . Entonces, demos una versión de cuento corto aquí.
R
código con muerte cerebral sin ningún intento de optimización puede calcular una cuadrícula de tamaño 100 con en unos pocos segundos. Uncódigoescrito cuidadosamentereduciría esto en al menos 2–3 órdenes de magnitud.C
A continuación se detallan dos esquemas para garantizar la convergencia monotónica. Uno usa los límites que se muestran a continuación, que parecen ayudar a salvar un paso de Newton o dos en ocasiones.
Ejemplo : y una cuadrícula uniforme para los grados de libertad de tamaño 100. Los valores propios están distribuidos por Pareto, por lo tanto, muy sesgados. A continuación hay tablas de la cantidad de pasos de Newton para encontrar cada raíz.p=100000
No habrá una solución de forma cerrada para este , en general, pero no es una gran cantidad de estructura actual que se puede utilizar para producir soluciones muy eficaces y seguros utilizando métodos de búsqueda de raíz estándar.
Antes de profundizar demasiado en las cosas, recopilemos algunas propiedades y consecuencias de la función
Propiedad 0 : es una función racional de λ . (Esto es evidente a partir de la definición). Consecuencia 0 : No existirá una solución algebraica general para encontrar la raíz d f ( λ ) - y = 0 . Esto se debe a que existe un problema equivalente de búsqueda de raíces polinomiales de grado p, por lo que si p no es extremadamente pequeño (es decir, menos de cinco), no existirá una solución general. Entonces, necesitaremos un método numérico.df λ
df(λ)−y=0 p p
Propiedad 1 : La función es convexa y disminuye en λ ≥ 0 . (Tome derivados.) Consecuencia 1 (a) : el algoritmo de búsqueda de raíces de Newton se comportará muy bien en esta situación. Sean y los grados de libertad deseados y λ 0 la raíz correspondiente, es decir, y = d f ( λ 0 ) . En particular, si comenzamos con cualquier valor inicial λ 1 < λ 0 (entonces, d f ( λ 1df λ≥0
y λ0 y=df(λ0) λ1<λ0 ), entonces la secuencia de iteraciones de Newton-paso λ 1 , λ 2 , ... convergerámonotónicamentea la solución única λ 0 .
Consecuencia 1 (b): Además, si comenzáramos con λ 1 > λ 0 , entonces elprimerpaso produciría λ 2 ≤ λ 0df(λ1)>y λ1,λ2,… λ0
λ1>λ0 λ2≤λ0 , de donde se incrementará monotónicamente a la solución por la consecuencia previa (ver advertencia más abajo). Intuitivamente, este último hecho es consecuencia de que si nos ponemos a la derecha de la raíz, la derivada es "demasiado" superficial debido a la convexidad de por lo que el primer paso Newton nos llevará algún lugar a la izquierda de la raíz. Nota: dado que d f no es en general convexo para λ negativo , esto proporciona una fuerte razón para preferir comenzar a la izquierda de la raíz deseada. De lo contrario, debemos verificar que el paso de Newton no haya resultado en un valor negativo para la raíz estimada, lo que puede colocarnos en algún lugar en una porción no convexa de d f .
df df λ df y1 y2<y1 λ1 df(λ1)=y1
Consecuencia 1 (c) : una vez que hemos encontrado la raíz de algunos y estamos buscando la raíz de algunos y 2 < y 1 , usamos λ 1 tal que d f ( λ 1 ) = y 1 como nuestra suposición inicial garantiza que comenzamos a la izquierda de la segunda raíz. Entonces, nuestra convergencia está garantizada para ser monótona a partir de ahí.
Propiedad 2 : existen límites razonables para proporcionar puntos de partida "seguros". Usando argumentos de convexidad y la desigualdad de Jensen, tenemos los siguientes límites Consecuencia 2: Esto nos dice que la raíz λ 0 satisface d f ( λ 0 ) = y obedece a 1
Esto supone que para todo i . Si este no es el caso, entonces el mismo límite se mantiene considerando solo el d i positivo y reemplazando p por el número de d i positivo . NB : Dado que d f ( 0 ) = p asumiendo todos d i > 0 , entonces y ∈ ( 0 , p ] , de donde los límites son siempre no triviales (por ejemplo, el límite inferior siempre no es negativo).di>0 i di p di df(0)=p di>0 y∈(0,p]
Aquí hay una gráfica de un ejemplo "típico" de con p = 400 . Hemos superpuesto una cuadrícula de tamaño 10 para los grados de libertad. Estas son las líneas horizontales en la trama. Las líneas verdes verticales corresponden al límite inferior en ( ⋆ ) .df(λ) p=400 (⋆)
Un algoritmo y algún código R de ejemplo
Un algoritmo muy eficiente dado una grilla de grados de libertad deseados en ( 0 , p ] es ordenarlos en orden decreciente y luego encontrar secuencialmente la raíz de cada uno, utilizando la raíz anterior como punto de partida para el siguiente. Podemos refinar esto aún más comprobando si cada raíz es mayor que el límite inferior para la siguiente raíz y, si no, podemos comenzar la siguiente iteración en el límite inferior.y1,…yn (0,p]
Aquí hay un código de ejemplo
R
, sin intentos de optimizarlo. Como se ve a continuación, todavía es bastante rápido, aunqueR
es, por decirlo cortésmente, horriblemente, terriblemente, muy lento en los bucles.Llamada de función de muestra
fuente
Además, existen un par de métodos que calcularán la ruta de regularización completa de manera eficiente:
Los anteriores son todos paquetes R, ya que está utilizando Python, scikit-learn contiene implementaciones para cresta, lazo y red elástica.
fuente
ols
función en elrms
paquete R puede usar la optimización numérica para encontrar la penalización óptima usando AIC efectivo. Pero debe proporcionar la pena máxima que no siempre es fácil.Una posible alternativa según la fuente a continuación parece ser:
La solución de forma cerrada:reF( λ ) = t r ( X( X⊤X+ λ Ipag)- 1X⊤)
Si utiliza la ecuación normal como solucionador o calcula la estimación de varianza-covarianza, ya debería haber calculado( X⊤X+ λ Ipag)- 1 . Este enfoque funciona mejor si está estimando los coeficientes en los distintosλ .
Fuente: https://onlinecourses.science.psu.edu/stat857/node/155
fuente