2016-05-21 38 views
7

Có cách nào để đặt một l2-Hình phạt cho mô hình hồi quy logistic trong statsmodel thông qua một tham số hay cái gì khác? Tôi chỉ tìm thấy hình phạt l1 trong tài liệu nhưng không có gì cho hình phạt l2.Python: l2-Hình phạt cho mô hình hồi quy logistic từ các mô hình thống kê?

+0

Bạn có thể cung cấp liên kết hoặc địa chỉ cho tài liệu bạn đã tìm thấy không? – piRSquared

+0

Tôi đang tham khảo mô hình này từ các mô hình thống kê: http://statsmodels.sourceforge.net/0.6.0/generated/statsmodels.discrete.discrete_model.Logit.html Để phù hợp với mô hình với quy tắc, bạn có thể sử dụng phương pháp: http: //statsmodels.sourceforge.net/0.6.0/generated/statsmodels.discrete.discrete_model.Logit.fit_regularized.html#statsmodels.discrete.discrete_model.Logit.fit_regularized Đối với phương thức tham số, tôi chỉ tìm thấy các tùy chọn '' l1 'hoặc' l1_cvxopt_cp'', cả hai có lẽ là các tùy chọn mà tôi đang tìm kiếm – TheDude

+0

Wow! Tài liệu đó không rõ ràng. Tôi xin lỗi, tôi không thể làm cho bất kỳ ý nghĩa dứt khoát của nó. Tôi đã viết các trình giải quyết xử lý l2. Nó thường dễ dàng hơn để giải quyết với một hình phạt l2 như các chức năng chi phí có ở khắp mọi nơi khác nhau, do đó gradient tồn tại. Tôi phải giả định nó ở đâu đó. Ước gì tôi có thể giúp nhiều hơn. – piRSquared

Trả lời

2

Các mô hình trong statsmodels.discrete như Logit, Poisson và MNLogit hiện chỉ bị phạt L1. Tuy nhiên, mạng lưới đàn hồi cho GLM và một vài mô hình khác gần đây đã được sáp nhập vào mô hình thống kê tổng thể.

GLM với nhị thức gia đình có phản hồi nhị phân là mô hình giống như rời rạc.Logit mặc dù việc triển khai khác nhau. Xem câu trả lời của tôi đối với hình phạt L2 trong số Is ridge binomial regression available in Python?

Điều gì chưa được hợp nhất thành bảng thống kê là hình phạt L2 với ma trận bị phạt có cấu trúc vì nó được sử dụng làm tính nhám trong các mô hình phụ gia tổng quát, GAM và phù hợp spline.

0

Nếu bạn xem kỹ Tài liệu cho statsmodels.regression.linear_model.OLS.fit_regularized bạn sẽ thấy rằng phiên bản hiện tại của mô hình thống kê cho phép thuần hóa Elastic Net, về cơ bản chỉ là sự kết hợp lồi của các hình phạt L1- và L2. sau xử lý để giảm bớt những hành vi không mong muốn của việc triển khai ngây thơ, nhìn thấy "đàn hồi Net" trên Wikipedia để biết chi tiết):

ElasticNet2

Nếu bạn có một cái nhìn vào các thông số cho fit_regularized trong tài liệu:

OLS.fit_regularized(method='elastic_net', alpha=0.0, L1_wt=1.0, start_params=None, profile_scale=False, refit=False, **kwargs)

bạn sẽ nhận ra rằng L1_wt chỉ là lambda_1 trong phương trình đầu tiên. Vì vậy, để có được L2-Penalty bạn đang tìm kiếm, bạn chỉ cần vượt qua L1_wt=0 như một đối số khi bạn gọi hàm. Như một ví dụ:

model = sm.OLS(y, X) 
results = model.fit_regularized(method='elastic_net', alpha=1.0, L1_wt=0.0) 
print(results.summary()) 

nên cung cấp cho bạn một L2 phạt Regression dự đoán mục tiêu y từ đầu vào X.

Hy vọng điều đó sẽ hữu ích!

P.S. Ba ý kiến ​​cuối cùng:

1) mô hình thống kê hiện chỉ thực hiện elastic_net làm tùy chọn cho đối số method. Vì vậy, cung cấp cho bạn L1 và L2 và bất kỳ sự kết hợp tuyến tính nào của chúng nhưng không có gì khác (đối với OLS ít nhất);

2) L1 Penalized Regression = LASSO (toán tử co rút và chọn lựa tuyệt đối ít nhất);

3) Hồi quy hình phạt L2 = Đảo ngược hồi quy, phương pháp Tikhonov – Miller, phương pháp Phillips – Twomey, phương pháp nghịch đảo tuyến tính hạn chế và phương pháp liên tục tuyến tính.

+0

Cool, nhưng đây là OLS, không phải hồi quy logistic. – user48956

+0

Đối với hồi quy hậu cần được thường xuyên hóa: m = statsmodels.genmod.generalized_linear_model.GLM (y, X, family = families.Binomial (link = links.Logit)); m.fit_regularized (...)? – user48956

+0

Vì vậy, ... trong ví dụ của bạn, không L2 = alpha khi L1_wt = 0? (alpha = L1 + L2 ... điều này có tác dụng không nếu chúng ta muốn đặt L1 = 0, L2 = 10)? – user48956

Các vấn đề liên quan