2015-10-13 28 views
11

Tôi đang cố gắng để vượt qua các tham số mô hình như một dict để một Scikit-học ước tính và không có may mắn. Nó chỉ có vẻ làm tổ dict của tôi vào một trong các tham số. Ví dụ:Vượt qua một dict để scikit tìm hiểu ước tính

params = { 
'copy_X': True, 
'fit_intercept': False, 
'normalize': True 
} 

lr = LinearRegression(params) 

Cung cấp cho tôi:

LinearRegression(copy_X=True, 
     fit_intercept={'copy_X': True, 'fit_intercept': False,'normalize': True}, 
    normalize=False) 

Ngoài ra, tôi tạo ra một chức năng để lặp qua các dict và có thể tạo ra một chuỗi như:

'copy_X=True, fit_intercept=True, normalize=False' 

này tương đương như không thành công . Bất cứ ai có lời khuyên nào ở đây? Hạn chế duy nhất tôi có là dữ liệu sẽ đến với tôi như một dict (thực sự là một đối tượng json được nạp với json.uploads).

Cảm ơn.

Trả lời

16

Giải pháp tốt nhất để khởi ước lượng của bạn với các thông số thích hợp sẽ được giải nén từ điển của bạn:

lr = LinearRegression(**params) 

Nếu vì một số lý do bạn cần đặt một số thông số sau đó, bạn có thể sử dụng:

lr.set_params(params) 

Điều này có lợi thế hơn khi sử dụng setattr ở chỗ nó cho phép Scikit học cách thực hiện một số kiểm tra xác thực trên các tham số.

+0

đây phải là câu trả lời được chấp nhận - đó là cách tiêu chuẩn để chuyển một loạt các kwarg vào một hàm. – eqzx

2

Tôi hiểu rồi. Được sử dụng setattr như thế này.

for k,v in params.items(): 
    setattr(lr,k,v) 
0

fit_intercept là đối số đầu tiên của đối tượng LinearRegression

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

Vì vậy, giải thích tại sao từ điển của bạn đã được thông qua với lập luận rằng, các args khác (cũng không bắt buộc) copy_Xnormalize đang nhận không có tham số để họ đang sử dụng các giá trị mặc định.

Bạn cũng có thể làm:

params = { 
'copy_X': True, 
'fit_intercept': False, 
'normalize': True 
} 

lr = LinearRegression(copy_X = params['copy_X'], \ 
         fit_intercept = params['fit_intercept'], \ 
         normalize = params['normalize']) 
Các vấn đề liên quan