He programado una regresión logística usando el algoritmo IRLS . Me gustaría aplicar una penalización LASSO para seleccionar automáticamente las funciones correctas. En cada iteración, se resuelve lo siguiente:
Sea un número real no negativo. No estoy penalizando la intercepción como se sugiere en The Elements of. Aprendizaje estadístico . Lo mismo ocurre con los coeficientes ya cero. De lo contrario, restaré un término del lado derecho:
Sin embargo, no estoy seguro acerca de la modificación del algoritmo IRLS. ¿Es la forma correcta de hacerlo?
Editar: aunque no estaba seguro de ello, esta es una de las soluciones que finalmente se me ocurrió. Lo interesante es que esta solución corresponde a lo que ahora entiendo sobre LASSO. De hecho, hay dos pasos en cada iteración en lugar de simplemente uno:
- El primer paso es el mismo que antes: hacemos una iteración del algoritmo (como si en la fórmula para el gradiente anterior),
- el segundo paso es el nuevo: aplicamos un umbral suave a cada componente (excepto el componente , que corresponde a la intersección) del vector obtenido en el primer paso. Esto se llama algoritmo iterativo de umbral blando .
Respuestas:
Este problema generalmente se resuelve mediante ajuste mediante descenso coordinado ( ver aquí ). Este método es más seguro, más eficiente numéricamente, algorítmicamente más fácil de implementar y aplicable a una matriz más general de modelos (que también incluye la regresión de Cox). Una implementación R está disponible en el paquete R glmnet . Los códigos son de código abierto (en parte y en C, en parte en R), por lo que puede usarlos como planos.
fuente
La función de pérdida LASSO tiene una discontinuidad en cero a lo largo de cada eje, por lo que IRLS tendrá problemas con ella. He encontrado un enfoque de tipo de optimización mínima secuencial (SMO) muy efectivo, ver por ejemplo
http://bioinformatics.oxfordjournals.org/content/19/17/2246
una versión con el software MATLAB es
http://bioinformatics.oxfordjournals.org/content/22/19/2348
El software está disponible aquí:
http://theoval.cmp.uea.ac.uk/~gcc/cbl/blogreg/
La idea básica es optimizar los coeficientes de uno en uno y probar para ver si cruza la discontinuidad de un coeficiente a la vez, lo cual es fácil ya que está realizando una optimización escalar. Puede sonar lento, pero en realidad es bastante eficiente (aunque espero que se hayan desarrollado mejores algoritmos desde entonces, probablemente por Keerthi o Chih-Jen Lin, ambos expertos líderes en ese tipo de cosas).
fuente
Puede consultar el documento: regresión logística regularizada eficiente L1, que es un algoritmo basado en IRLS para LASSO. En cuanto a la implementación, el enlace puede ser útil para usted (http://ai.stanford.edu/~silee/softwares/irlslars.htm).
fuente
El IRLS para el problema LASSO es el siguiente:
Donde es una matriz diagonal - . Esto viene de .W Wi,i=1|xi|
∥x∥1=∑i|xi|=∑ix2i|xi|
Ahora, lo anterior es solo la regularización de Tikhonov .W x xTWx x x diag(sign(x)) Wx
Sin embargo, dado que depende de uno debe resolverlo de forma iterativa (también esto cancela el factor 2 en la regularización de Tikhonov, ya que la derivada de con respecto a mientras mantiene como constante es que equivale a ):
Donde .WKi,i=1∣∣xki∣∣
Inicialización puede ser por .W=I
Preste atención, esto no funciona bien para valores grandes de y es mejor usar ADMM o Descenso de coordenadas.λ
fuente