Tôi đang xem phần LAB §.6.6 về Hồi quy độ dốc / Lasso trong cuốn sách 'Giới thiệu về học thống kê với các ứng dụng trong R' của James, Witten, Hastie, Tibshirani (2013).
Cụ thể hơn, tôi đang cố gắng áp dụng Ridge
mô hình scikit-learn cho bộ dữ liệu 'Hitters' từ gói R 'ISLR'. Tôi đã tạo cùng một bộ tính năng như được hiển thị trong mã R. Tuy nhiên, tôi không thể đến gần với kết quả từ glmnet()
mô hình. Tôi đã chọn một tham số điều chỉnh L2 để so sánh. (Đối số 'alpha' trong scikit-learn).
Con trăn
regr = Ridge(alpha=11498)
regr.fit(X, y)
R:
Lưu ý rằng đối số alpha=0
trong glmnet()
phương tiện mà một hình phạt L2 nên được áp dụng (Ridge hồi quy). Tài liệu cảnh báo không nhập một giá trị duy nhất cho lambda
, nhưng kết quả giống như trong ISL, trong đó một vectơ được sử dụng.
ridge.mod <- glmnet(x,y,alpha=0,lambda=11498)
Điều gì gây ra sự khác biệt?
Chỉnh sửa:
Khi sử dụng penalized()
từ gói bị phạt trong R, các hệ số tương tự như với scikit-learn.
ridge.mod2 <- penalized(y,x,lambda2=11498)
Có lẽ câu hỏi sau đó cũng có thể là: 'Sự khác biệt giữa glmnet()
và penalized()
khi thực hiện hồi quy Ridge là gì?
Trình bao bọc python mới cho mã Fortran thực tế được sử dụng trong gói R glmnet
https://github.com/civisanalytics/python-glmnet
sklearn.linear_model.Ridge
ước tính đánh chặn không được đánh giá (tiêu chuẩn) và hình phạt là như vậy||Xb - y - intercept||^2 + alpha ||b||^2
được giảm thiểu chob
. Có thể có các yếu tố1/2
hoặc1/n_samples
hoặc cả hai trước hình phạt, làm cho kết quả khác nhau ngay lập tức. Để giải quyết vấn đề mở rộng hình phạt, đặt hình phạt thành 0 trong cả hai trường hợp, giải quyết bất kỳ sự khác biệt nào ở đó và sau đó kiểm tra xem việc thêm lại hình phạt nào. Và btw IMHO ở đây là nơi thích hợp để đặt câu hỏi này.