Perbedaan antara ElasticNet di scikit-learn Python dan Glmnet di R

11

Adakah yang mencoba memverifikasi apakah pemasangan model Net Elastis dengan ElasticNetdi scikit-learn in Python dan glmnetdi R pada set data yang sama menghasilkan hasil aritmatika yang identik? Saya telah bereksperimen dengan banyak kombinasi parameter (karena dua fungsi berbeda dalam nilai default yang diteruskan ke argumen) dan juga menskalakan data, tetapi sepertinya tidak ada yang menghasilkan model yang sama antara kedua bahasa. Adakah yang mengalami masalah yang sama?

Dionisis M
sumber

Jawaban:

6

Akhirnya saya mendapat nilai yang sama dengan kode berikut:

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)
Dionisis M
sumber
3
Ada wrapper python yang relatif baru untuk kode Fortran digunakan dalam R paket glmnet. Ini juga harus mendapatkan hasil yang sama seperti di R . github.com/civisanalytics/python-glmnet
Jordi