Je passe par la section LAB §6.6 sur Ridge Regression / Lasso dans le livre 'An Introduction to Statistical Learning with Applications in R' de James, Witten, Hastie, Tibshirani (2013).
Plus précisément, j'essaie d'appliquer le Ridge
modèle scikit-learn au jeu de données «Hitters» du package R «ISLR». J'ai créé le même ensemble de fonctionnalités que celui indiqué dans le code R. Cependant, je ne peux pas me rapprocher des résultats du glmnet()
modèle. J'ai sélectionné un paramètre de réglage L2 à comparer. (argument 'alpha' dans scikit-learn).
Python:
regr = Ridge(alpha=11498)
regr.fit(X, y)
http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb
R:
Notez que l'argument alpha=0
dans glmnet()
signifie qu'une pénalité L2 doit être appliquée (régression Ridge). La documentation vous avertit de ne pas entrer une seule valeur pour lambda
, mais le résultat est le même que dans ISL, où un vecteur est utilisé.
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
Qu'est-ce qui cause les différences?
Edit:
Lors de l'utilisation à penalized()
partir du package pénalisé dans R, les coefficients sont les mêmes qu'avec scikit-learn.
ridge.mod2 <- penalized(y,x,lambda2=11498)
Peut-être que la question pourrait alors être aussi: «Quelle est la différence entre glmnet()
et penalized()
quand faire une régression Ridge?
Nouveau wrapper python pour le code Fortran réel utilisé dans le package R glmnet
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
ne fait pas d'estimation d'interception non standardisée (standard) et la pénalité est telle qu'elle||Xb - y - intercept||^2 + alpha ||b||^2
est minimisée pourb
. Il peut y avoir des facteurs1/2
ou les1/n_samples
deux devant la pénalité, ce qui rend les résultats différents immédiatement. Pour éliminer le problème de mise à l'échelle de la pénalité, définissez la pénalité sur 0 dans les deux cas, résolvez les divergences là-bas, puis vérifiez l'effet de l'ajout de la pénalité. Et à mon humble avis, voici le bon endroit pour poser cette question.