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 Ridgemodello 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=0in 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.Ridgestima di intercettazione non standardizzata (standard) e la penalità è tale da||Xb - y - intercept||^2 + alpha ||b||^2essere minimizzata perb. Ci possono essere fattori1/2o1/n_samplesentrambi 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.