Estoy revisando la sección LAB §6.6 sobre Regresión de cresta / lazo en el libro 'Una introducción al aprendizaje estadístico con aplicaciones en R' de James, Witten, Hastie, Tibshirani (2013).
Más específicamente, estoy tratando de aplicar el Ridge
modelo scikit-learn al conjunto de datos 'Hitters' del paquete R 'ISLR'. He creado el mismo conjunto de características que se muestran en el código R. Sin embargo, no puedo acercarme a los resultados del glmnet()
modelo. He seleccionado un parámetro de ajuste L2 para comparar. (argumento 'alfa' en scikit-learn).
Pitón:
regr = Ridge(alpha=11498)
regr.fit(X, y)
http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb
R:
Tenga en cuenta que el argumento alpha=0
en glmnet()
significa que debe aplicarse una penalización L2 (regresión de Ridge). La documentación advierte que no se ingrese un valor único para lambda
, pero el resultado es el mismo que en ISL, donde se usa un vector.
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
¿Qué causa las diferencias?
Editar:
cuando se usa penalized()
desde el paquete penalizado en R, los coeficientes son los mismos que con scikit-learn.
ridge.mod2 <- penalized(y,x,lambda2=11498)
Quizás la pregunta también podría ser: '¿Cuál es la diferencia entre glmnet()
y penalized()
cuando se hace la regresión de Ridge?
Nuevo contenedor de Python para el código Fortran real utilizado en el paquete R glmnet
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
realiza la estimación de interceptación no normalizada (estándar) y la penalización es tal que||Xb - y - intercept||^2 + alpha ||b||^2
se minimizab
. Puede haber factores1/2
o1/n_samples
ambos frente a la penalización, lo que hace que los resultados sean diferentes de inmediato. Para descifrar el problema de escala de penalización, establezca la penalización en 0 en ambos casos, resuelva cualquier discrepancia allí y luego verifique qué hace la suma de la penalización. Y por cierto, en mi humilde opinión, aquí es el lugar adecuado para hacer esta pregunta.