Tôi đang cố gắng sao chép kết quả từ sklearn
thư viện hồi quy logistic bằng glmnet
gó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 sklearn
hà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.admit
gre
gpa
rank
#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 R
ra 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 LiblineaR
gó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 ( liblinear
cũ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 glmnet
cung 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