Tăng cường và đóng bao cây (XGBoost, LightGBM)


16

Có rất nhiều bài đăng trên blog, video trên YouTube, v.v. về ý tưởng đóng bao hoặc tăng cường cây xanh. Hiểu biết chung của tôi là mã giả cho mỗi loại là:

Đóng bao:

  1. Lấy N mẫu ngẫu nhiên là x% số mẫu và y% của các tính năng
  2. Điều chỉnh mô hình của bạn (ví dụ: cây quyết định) trên mỗi N
  3. Dự đoán với mỗi N
  4. Trung bình các dự đoán để có được dự đoán cuối cùng

Tăng cường:

  1. Điều chỉnh mô hình của bạn (ví dụ: cây quyết định) với dữ liệu của bạn
  2. Lấy phần dư
  3. Phù hợp với mô hình của bạn với phần dư
  4. Tới 2 cho N vòng tăng
  5. Dự đoán cuối cùng là tổng của các dự đoán tuần tự.

Tôi sẽ có bất kỳ làm rõ cho sự hiểu biết của tôi ở trên, nhưng câu hỏi dự định của tôi là như sau:

Cả XGBoost và LightGBM đều có thông số cho phép đóng bao. Ứng dụng này không phải là Bagging HOẶC Boosting (đó là những gì mọi bài đăng trên blog nói về), mà là Bagging Boosting. Mã giả cho việc đóng gói và tăng cường kết hợp diễn ra ở đâu và khi nào?

Tôi đã dự đoán nó sẽ là "Cây được đóng gói", nhưng có vẻ như đó là "Cây được đóng gói". Sự khác biệt có vẻ đáng kể.

Cây Boosted đóng gói:

  1. Lấy N mẫu ngẫu nhiên là x% số mẫu và y% của các tính năng
  2. Phù hợp với cây Boosted trên mỗi mẫu N
  3. Dự đoán với mỗi N
  4. Trung bình các dự đoán để có được dự đoán cuối cùng

Đây dường như là cách tốt nhất để làm điều đó. Rốt cuộc, rủi ro trong việc thúc đẩy là quá mức và lợi ích chính của việc đóng bao là giảm quá mức; đóng gói một loạt các mô hình tăng cường có vẻ như là một ý tưởng tuyệt vời.

Tuy nhiên, từ việc xem qua, ví dụ như scikit-learn gradient_boosting.py (không đóng gói mẫu, nhưng không chọn tính năng ngẫu nhiên) và kết hợp một số cố định nhỏ trên các bài đăng về LightGBM và XGBoost, có vẻ như XGBoost và LightGBM hoạt động như sau:

Cây được đóng gói tăng cường:

  1. Khớp cây quyết định với dữ liệu của bạn
  2. Đối với tôi trong N tăng vòng:
    • Lấy phần dư
    • if i mod bag_frequency == 0 (nghĩa là túi cứ sau 5 vòng):
      • Lấy một mẫu ngẫu nhiên duy nhất là x% của các mẫu và y% của các tính năng; sử dụng mẫu ngẫu nhiên này trong tương lai
    • phù hợp với cây còn lại
  3. Dự đoán cuối cùng là tổng của các dự đoán tuần tự.

Hãy sửa chữa sự hiểu biết của tôi ở đây và điền vào các chi tiết. Cây có túi được tăng cường (chỉ với 1 cây ngẫu nhiên trên mỗi túi_frequency) dường như không mạnh bằng Cây được tăng cường.


2
+1 cho một câu hỏi thú vị và được xây dựng rất tốt. Và chào mừng đến với trang web.
mkt - Phục hồi Monica

bạn cần một "tính toán lỗi" để tăng cường. Làm sai mà ngã ra. Các trọng số là rất quan trọng cho adaboost. Nó không phải là dư. ... Chúng tôi không nói về độ dốc ngẫu nhiên khi cần thiết trong việc tăng cường, mặc dù nó tăng tốc mọi thứ.
EngrStudent - Phục hồi Monica

Đây là túi tăng cường. Thay vì một cây mới cho mỗi bước loạt, bạn có được một khu rừng mới với sản lượng trung bình. Eugene Tuv và Kari Torkkola. jmlr.org/auge/volume10/tuv09a/tuv09a.pdf
EngrStudent - Tái lập Monica

việc tăng cường đóng gói sẽ tạo ra một loạt các bản hòa tấu và lấy sản lượng trung bình. Nó có thể tham gia vào sự phù hợp quá mức mà một loạt (được tăng cường) có thể tạo ra, và mang lại một sản lượng mạnh mẽ hơn, nhưng mức tăng sẽ không lớn.
EngrStudent - Phục hồi Monica

Câu trả lời:


13

Đóng bao: Lấy N mẫu ngẫu nhiên là x% số mẫu và y% của các Tính năng

Các trường hợp được lấy mẫu phụ nhiều lần trong Đóng bao , nhưng không phải là Tính năng. ( RandomForests , XGBoostCatBoost làm cả hai):

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    Train model on D_i (and then predict)
Combine predictions with equal weight 

Bao gồm một bước khởi tạo trong mã giả Tăng cường của bạn để thoát khỏi sự dư thừa:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted data (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Cây Boosted đóng gói (như bạn gọi nó) chắc chắn là một Cách tiếp cận hợp lý, nhưng khác với XGBoost hoặc CatBoost :

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    (Insert Boosting pseudo code here (on D_i))
Combine predictions with equal weight 

XGBoostCatBoost đều dựa trên Boosting và sử dụng toàn bộ dữ liệu đào tạo. Họ cũng thực hiện đóng bao bằng cách lấy mẫu một lần trong mỗi lần lặp tăng cường:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted bootstrap sample (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Nếu bạn muốn gắn bó với "mô hình phù hợp với phần dư", thì điều này sẽ tương đương với "mô hình phù hợp với phần dư của dữ liệu trong mẫu bootstrap ".


Nhận xét thêm :

Không có " cách tốt nhất để làm điều đó " như bạn đề xuất (không có định lý bữa trưa miễn phí). "Cây được đóng gói" có thể vượt trội hơn XGBoost trên một số bộ dữ liệu nhất định.

Lấy một mẫu ngẫu nhiên x% của các mẫu

Dòng này là khó hiểu. Bạn đã có cái này từ đâu?

if i mod bag_frequency == 0 (nghĩa là túi cứ sau 5 vòng):

Điều này không nên được đề cập trong mã giả của bạn. Đặc biệt là khi có các thông số quan trọng khác bị bỏ qua (như tốc độ học tập trong việc tăng cường).


(+1) Câu trả lời hay! Để làm rõ: OP có sai khi nói " Cả XGBoost và LightGBM đều có thông số cho phép đóng bao " không?
mkt - Phục hồi Monica

Cả hai đều cho phép đóng bao: bagging_fraction trong LightGBMmẫu phụ trong XGBoost . Không chắc chắn, tại sao tôi nhắc đến CatBoost toàn bộ thời gian. Nhưng tất cả đều hoạt động theo cùng một cách liên quan đến câu hỏi.
Laksan Nathan

Sai lầm của tôi, tôi đã bỏ lỡ dòng trong câu trả lời của bạn mà đề cập rằng. Bạn có thể giải thích "việc lấy mẫu một lần trong mỗi lần lặp tăng cường " không? Bạn có nghĩa là trong mỗi lần lặp tăng cường, nhiều mẫu phụ được lấy, cây phù hợp với từng mẫu, và sau đó tỷ lệ phân loại sai được tính dựa trên các cây được đóng gói và cuối cùng là trọng số được cập nhật? Nếu vậy, bạn có thể làm rõ điều này trong mã giả của bạn?
mkt - Phục hồi Monica

Không có nhiều mẫu phụ được rút ra, chỉ một: Thay vì điều chỉnh mô hình cho tất cả các trường hợp có trọng số, mô hình được đào tạo trên một mẫu bootstrap.
Laksan Nathan

Về "Lấy một mẫu ngẫu nhiên x% mẫu"; tốt hơn là "lấy một mẫu x% của các hàng". Tôi đã nhận được điều đó từ đây .
Jonathan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.