Tôi đang cố gắng sao chép kết quả từ sklearnthư viện hồi quy logistic bằng glmnetgói trong R.
Từ tài liệusklearn hồi quy logistic , nó đang cố gắng giảm thiểu hàm chi phí theo hình phạt l2
min w , c 1
Từ các họa tiết của glmnet, việc triển khai của nó giảm thiểu hàm chi phí hơi khác nhau
Với một số điều chỉnh trong phương trình thứ hai và bằng cách đặt , λ min β , β 0 1
mà khác với sklearnhàm chi phí chỉ bằng một yếu tố của nếu thiết lập 1, vì vậy tôi đã mong đợi ước tính hệ số tương tự từ hai gói. Nhưng họ khác nhau. Tôi đang sử dụng dữ liệu từ UCLA idrehướng dẫn, dự đoándựa trên,và. Có 400 quan sát, như vậy vớiC=1,λ=0.0025.admitgregparank
#python sklearn
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
model = LogisticRegression(fit_intercept = False, C = 1)
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]
> # R glmnet
> df = fread("https://stats.idre.ucla.edu/stat/data/binary.csv")
> X = as.matrix(model.matrix(admit~gre+gpa+as.factor(rank), data=df))[,2:6]
> y = df[, admit]
> mylogit <- glmnet(X, y, family = "binomial", alpha = 0)
> coef(mylogit, s = 0.0025)
6 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -3.984226893
gre 0.002216795
gpa 0.772048342
as.factor(rank)2 -0.530731081
as.factor(rank)3 -1.164306231
as.factor(rank)4 -1.354160642
Đầu Rra bằng cách nào đó gần với hồi quy logistic mà không cần chính quy, như có thể thấy ở đây . Tôi đang thiếu một cái gì đó hoặc làm một cái gì đó rõ ràng sai?
Cập nhật: Tôi cũng đã thử sử dụng LiblineaRgói Rđể tiến hành cùng một quy trình và nhận được một bộ ước tính khác ( liblinearcũng là người giải quyết sklearn):
> fit = LiblineaR(X, y, type = 0, cost = 1)
> print(fit)
$TypeDetail
[1] "L2-regularized logistic regression primal (L2R_LR)"
$Type
[1] 0
$W
gre gpa as.factor(rank)2 as.factor(rank)3 as.factor(rank)4 Bias
[1,] 0.00113215 7.321421e-06 5.354841e-07 1.353818e-06 9.59564e-07 2.395513e-06
Cập nhật 2: tắt tiêu chuẩn hóa trong glmnetcung cấp:
> mylogit <- glmnet(X, y, family = "binomial", alpha = 0, standardize = F)
> coef(mylogit, s = 0.0025)
6 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -2.8180677693
gre 0.0034434192
gpa 0.0001882333
as.factor(rank)2 0.0001268816
as.factor(rank)3 -0.0002259491
as.factor(rank)4 -0.0002028832