Saya mencoba memahami mengapa output dari regresi logistik kedua perpustakaan ini memberikan hasil yang berbeda.
Saya menggunakan dataset dari tutorial idre UCLA , memprediksi admitberdasarkan gre, gpadan rank. rankdiperlakukan sebagai variabel kategori, jadi pertama-tama dikonversi ke variabel dummy dengan rank_1dijatuhkan. Kolom intersep juga ditambahkan.
df = pd.read_csv("https://stats.idre.ucla.edu/stat/data/binary.csv")
y, X = dmatrices('admit ~ gre + gpa + C(rank)', df, return_type = 'dataframe')
X.head()
> Intercept C(rank)[T.2] C(rank)[T.3] C(rank)[T.4] gre gpa
0 1 0 1 0 380 3.61
1 1 0 1 0 660 3.67
2 1 0 0 0 800 4.00
3 1 0 0 1 640 3.19
4 1 0 0 1 520 2.93
# Output from scikit-learn
model = LogisticRegression(fit_intercept = False)
mdl = model.fit(X, y)
model.coef_
> array([[-1.35417783, -0.71628751, -1.26038726, -1.49762706, 0.00169198,
0.13992661]])
# corresponding to predictors [Intercept, rank_2, rank_3, rank_4, gre, gpa]
# Output from statsmodels
logit = sm.Logit(y, X)
logit.fit().params
> Optimization terminated successfully.
Current function value: 0.573147
Iterations 6
Intercept -3.989979
C(rank)[T.2] -0.675443
C(rank)[T.3] -1.340204
C(rank)[T.4] -1.551464
gre 0.002264
gpa 0.804038
dtype: float64
Keluaran dari statsmodelssama dengan yang ditunjukkan pada situs web idre, tapi saya tidak yakin mengapa scikit-learn menghasilkan set koefisien yang berbeda. Apakah ini meminimalkan beberapa fungsi kerugian yang berbeda? Apakah ada dokumentasi yang menyatakan implementasi?
glmnetpaket dalam R, tetapi tidak bisa mendapatkan koefisien yang sama. glmnet memiliki fungsi biaya yang sedikit berbeda dibandingkan dengan sklearn , tetapi bahkan jika saya setalpha=0inglmnet(artinya hanya menggunakan l2-penalti) dan set1/(N*lambda)=C, saya masih belum mendapatkan hasil yang sama?