Phương pháp có chỉ dẫn: Thuật toán di truyền

Tinh chỉnh siêu tham số trong Python

Alex Scriven

Data Scientist

Bài học về di truyền học

 

Trong tiến hóa di truyền ngoài đời thực, quy trình như sau:

  1. Có nhiều sinh vật tồn tại ("con cháu")
  2. Cá thể khỏe nhất sống sót và bắt cặp
  3. Có hiện tượng "lai chéo" khi tạo con cháu
  4. Một số con cháu đột biến ngẫu nhiên
    • Đột biến đôi khi giúp một số con cháu có lợi thế
  5. Quay lại (1)!
Tinh chỉnh siêu tham số trong Python

Di truyền trong Machine Learning

 

Ta áp dụng ý tưởng này cho tinh chỉnh siêu tham số:

  1. Tạo một số mô hình (kèm thiết lập siêu tham số)
  2. Chọn mô hình tốt nhất (theo hàm chấm điểm)
    • Đây là các mô hình "sống sót"
  3. Tạo mô hình mới tương tự mô hình tốt nhất
  4. Thêm ngẫu nhiên để tránh kẹt ở cực trị cục bộ
  5. Lặp lại đến khi hài lòng
Tinh chỉnh siêu tham số trong Python

Vì sao hiệu quả?

 

Đây là tìm kiếm có chỉ dẫn với nhiều ưu điểm:

  • Học từ các vòng lặp trước, giống tinh chỉnh siêu tham số Bayes.
  • Có thêm lợi thế về tính ngẫu nhiên
  • (Gói sẽ dùng) xử lý nhiều phần việc máy học nhàm chán
Tinh chỉnh siêu tham số trong Python

Giới thiệu TPOT

 

Thư viện hữu ích cho tinh chỉnh siêu tham số di truyền là TPOT:

Hãy xem TPOT như Trợ lý Khoa học Dữ liệu của bạn. TPOT là công cụ AutoML Python tối ưu hóa các pipeline máy học bằng lập trình di truyền.

Pipeline không chỉ gồm mô hình (hoặc nhiều mô hình) mà còn xử lý đặc trưng và các bước khác. Ngoài ra còn trả về mã Python của pipeline cho bạn!

Tinh chỉnh siêu tham số trong Python

Thành phần TPOT

Các tham số chính của TPOT classifier:

  • generations: Số vòng lặp huấn luyện.
  • population_size: Số mô hình giữ lại sau mỗi vòng.
  • offspring_size: Số mô hình tạo ra mỗi vòng.
  • mutation_rate: Tỷ lệ pipeline áp dụng ngẫu nhiên.
  • crossover_rate: Tỷ lệ pipeline lai mỗi vòng.
  • scoring: Hàm chọn mô hình tốt nhất.
  • cv: Chiến lược cross-validation.
Tinh chỉnh siêu tham số trong Python

Ví dụ đơn giản

Một ví dụ đơn giản:

from tpot import TPOTClassifier
tpot = TPOTClassifier(generations=3, population_size=5, 
                      verbosity=2, offspring_size=10,
                      scoring='accuracy', cv=5)

tpot.fit(X_train, y_train) print(tpot.score(X_test, y_test))

Chúng ta giữ mặc định cho mutation_ratecrossover_rate vì tốt nhất nên để mặc định nếu không có hiểu biết sâu về lập trình di truyền.

Lưu ý: Không có siêu tham số riêng cho thuật toán?

Tinh chỉnh siêu tham số trong Python

Ayo berlatih!

Tinh chỉnh siêu tham số trong Python

Preparing Video For Download...