Unterschied zwischen ElasticNet in Scikit-Learn Python und Glmnet in R.

11

Hat jemand versucht zu überprüfen, ob das Anpassen eines Elastic Net-Modells mit ElasticNetin scikit-learn in Python und glmnetin R an denselben Datensatz identische arithmetische Ergebnisse liefert? Ich habe mit vielen Kombinationen der Parameter experimentiert (da sich die beiden Funktionen in den Standardwerten unterscheiden, die sie an die Argumente übergeben) und auch die Daten skaliert, aber nichts scheint das gleiche Modell zwischen den beiden Sprachen zu erzeugen. Hat sich jemand dem gleichen Problem gestellt?

Dionysis M.
quelle

Antworten:

6

Schließlich habe ich die gleichen Werte mit folgendem Code erhalten:

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.
quelle
3
Es gibt einen relativ neuen Python-Wrapper für den im R- Paket verwendeten Fortran-Code glmnet. Dies sollte auch die gleichen Ergebnisse wie in R erhalten . github.com/civisanalytics/python-glmnet
Jordi