Tôi đang cố gắng để hiểu tại sao đầu ra từ hồi quy logistic của hai thư viện này cho kết quả khác nhau.
Tôi đang sử dụng dữ liệu từ UCLA idre hướng dẫn , dự đoán admit
dựa trên gre
, gpa
và rank
. rank
được coi là biến phân loại, do đó, lần đầu tiên nó được chuyển đổi thành biến giả với biến rank_1
. Một cột chặn cũng được thêm vào.
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
Đầu ra từ statsmodels
giống như hiển thị trên trang web idre, nhưng tôi không chắc tại sao scikit-learn tạo ra một tập hợp các hệ số khác nhau. Liệu nó giảm thiểu một số chức năng mất khác nhau? Có tài liệu nào nêu rõ việc thực hiện không?
glmnet
gói trong R, nhưng không thể có được hệ số tương tự. glmnet có hàm chi phí hơi khác so với sklearn , nhưng ngay cả khi tôi đặtalpha=0
trongglmnet
(có nghĩa là chỉ sử dụng l2-phạt) và thiết lập1/(N*lambda)=C
, tôi vẫn không nhận được kết quả tương tự?