Différence entre ElasticNet en scythit-learn Python et Glmnet en R

11

Quelqu'un a-t-il essayé de vérifier si l'ajustement d'un modèle Elastic Net avec ElasticNetin scikit-learn en Python et glmneten R sur le même ensemble de données produit des résultats arithmétiques identiques? J'ai expérimenté de nombreuses combinaisons de paramètres (car les deux fonctions diffèrent dans les valeurs par défaut qu'elles transmettent aux arguments) et j'ai également mis à l'échelle les données, mais rien ne semble produire le même modèle entre les deux langues. Quelqu'un at-il fait face au même problème?

Dionysis M
la source

Réponses:

6

Enfin, j'ai obtenu les mêmes valeurs avec le code suivant:

Python

# normalize function that gives the same with R
def mystandardize(D):
   S = np.std(D, axis=0, ddof=1)
   M = np.mean(D, axis = 0)
   D_norm = (D-M)/S
return [D_norm, M, S]

Y_norm_train = pd.DataFrame(mystandardize(Y_train)[0])
glmnet_regr = linear_model.ElasticNet(alpha=1, l1_ratio = 0.01,
                                  fit_intercept = True, normalize =    False, tol=0.0000001, max_iter = 100000)
glmnet_regr.fit(X_train, Y_norm_train)

R

y_norm_train <- scale(y[train_idx])
glmnet_obj_norm <- glmnet(x_train, y_norm_train, alpha=0.01, lambda = 1,  
                   thresh = 1e-07, standardize = FALSE, intercept=TRUE, standardize.response = FALSE)
print_coef(glmnet_obj_norm)
Dionysis M
la source
3
Il existe un wrapper python relativement nouveau pour le code Fortran utilisé dans le R package glmnet. Cela devrait également vous obtenir les mêmes résultats que dans R . github.com/civisanalytics/python-glmnet
Jordi