ความแตกต่างระหว่าง ElasticNet ใน Scikit-Learn Python และ Glmnet ใน R


11

มีใครพยายามที่จะตรวจสอบว่าเหมาะสมกับโมเดล Elastic Net ด้วยElasticNetใน scikit-Learn ใน Python และglmnetใน R บนชุดข้อมูลเดียวกันสร้างผลลัพธ์ทางคณิตศาสตร์ที่เหมือนกันหรือไม่ ฉันได้ทดลองกับการรวมกันของพารามิเตอร์หลายชุด (เนื่องจากทั้งสองฟังก์ชั่นแตกต่างกันในค่าเริ่มต้นที่พวกเขาส่งผ่านไปยังข้อโต้แย้ง) และปรับขนาดข้อมูล แต่ดูเหมือนไม่มีอะไรที่จะสร้างแบบจำลองเดียวกันระหว่างสองภาษา มีใครประสบปัญหาเดียวกันหรือไม่


คำตอบ:


6

ในที่สุดฉันก็ได้รับค่าเดียวกันกับรหัสต่อไปนี้:

หลาม

# 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)

3
มีเสื้อคลุมหลามที่ค่อนข้างใหม่สำหรับรหัส Fortran ใช้ในการเป็นRglmnetแพคเกจ นอกจากนี้ยังควรจะได้รับผลเช่นเดียวกับในR github.com/civisanalytics/python-glmnet
Jordi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.