Tinh chỉnh siêu tham số trong Python
Alex Scriven
Data Scientist
Cho đến nay, tất cả đều là tìm kiếm không có thông tin:
Tìm kiếm không có thông tin: Mỗi lần lặp tinh chỉnh siêu tham số không học từ các lần trước.
Điều này cho phép chúng ta chạy song song. Nhưng có vẻ không hiệu quả?
Quy trình đến nay:

Một cách khác:

Một phương pháp cơ bản có thông tin:
Bắt đầu rộng và ngẫu nhiên, rồi tinh chỉnh dần.
Quy trình:
Bạn có thể thay (3) bằng các lần tìm kiếm ngẫu nhiên thêm trước khi tìm kiếm lưới
Tinh chỉnh từ thô đến tinh có lợi thế:
Không lãng phí thời gian ở không gian tìm kiếm cho kết quả kém!
Lưu ý: Có thông tin theo lô, không phải theo từng mô hình
Hãy xem ví dụ với các phạm vi siêu tham số sau:
max_depth_list từ 1 đến 65min_sample_list từ 3 đến 17learn_rate_list 150 giá trị từ 0.01 đến 150Chúng ta có bao nhiêu mô hình khả dĩ?
combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
Hãy thực hiện tìm kiếm ngẫu nhiên trên 500 tổ hợp.
Đây là biểu đồ điểm chính xác:

Những mô hình nào tốt?
Kết quả hàng đầu:
| max_depth | min_samples_leaf | learn_rate | accuracy |
|---|---|---|---|
| 10 | 7 | 0.01 | 96 |
| 19 | 7 | 0.023355705 | 96 |
| 30 | 6 | 1.038389262 | 93 |
| 27 | 7 | 1.11852349 | 91 |
| 16 | 7 | 0.597651007 | 91 |
Hãy trực quan hóa max_depth so với độ chính xác:

min_samples_leaf tốt hơn khi dưới 8

learn_rate kém hơn khi trên 1.3

Những gì biết từ lần lặp đầu:
max_depth từ 8 đến 30learn_rate nhỏ hơn 1.3min_samples_leaf có lẽ nhỏ hơn 8Tiếp theo là gì? Lại tìm kiếm ngẫu nhiên hoặc lưới dựa trên những gì đã biết!
Lưu ý: Đây chỉ là phân tích hai biến. Bạn có thể khám phá nhiều siêu tham số (3, 4+) trên một biểu đồ, nhưng ngoài phạm vi khóa học.
Tinh chỉnh siêu tham số trong Python