Sto esaminando la sezione LAB §6.6 su Ridge Regression / Lasso nel libro 'An Introduction to Statistical Learning with Applications in R' di James, Witten, Hastie, Tibshirani (2013).
Più specificamente, sto cercando di applicare il Ridge
modello scikit-learn al set di dati "Hitters" dal pacchetto R "ISLR". Ho creato lo stesso set di funzionalità mostrato nel codice R. Tuttavia, non riesco ad avvicinarmi ai risultati del glmnet()
modello. Ho selezionato un parametro di ottimizzazione L2 da confrontare. (argomento 'alfa' in scikit-learn).
Pitone:
regr = Ridge(alpha=11498)
regr.fit(X, y)
http://nbviewer.ipython.org/github/JWarmenhoven/ISL-python/blob/master/Notebooks/Chapter%206.ipynb
R:
Si noti che l'argomento alpha=0
in glmnet()
significa che dovrebbe essere applicata una penalità L2 (regressione di Ridge). La documentazione avverte di non inserire un singolo valore per lambda
, ma il risultato è lo stesso di ISL, dove viene utilizzato un vettore.
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
Cosa causa le differenze?
Modifica:
quando si utilizza penalized()
dal pacchetto penalizzato in R, i coefficienti sono gli stessi di scikit-learn.
ridge.mod2 <- penalized(y,x,lambda2=11498)
Forse la domanda potrebbe anche essere: 'Qual è la differenza tra glmnet()
e penalized()
quando si fa la regressione di Ridge?
Nuovo wrapper python per il codice Fortran effettivo utilizzato nel pacchetto R glmnet
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
stima di intercettazione non standardizzata (standard) e la penalità è tale da||Xb - y - intercept||^2 + alpha ||b||^2
essere minimizzata perb
. Ci possono essere fattori1/2
o1/n_samples
entrambi di fronte alla penalità, rendendo immediatamente i risultati diversi. Per fattorizzare il problema del ridimensionamento della penalità, imposta la penalità su 0 in entrambi i casi, risolvi eventuali discrepanze lì e controlla cosa fa l'aggiunta della penalità. E tra l'IMHO qui è il posto giusto per porre questa domanda.