Thảo luận về overfit trong xgboost


20

Thiết lập của tôi là như sau:

Tôi đang làm theo hướng dẫn trong "Mô hình dự đoán ứng dụng". Vì vậy, tôi đã lọc các tính năng tương quan và kết thúc với các điều sau đây:

  • 4900 điểm dữ liệu trong tập huấn luyện và 1600 điểm dữ liệu trong tập kiểm tra.
  • Tôi có 26 tính năng và mục tiêu là một biến liên tục.

Tôi áp dụng phương pháp định giá chéo 5 lần để đào tạo các mô hình bằng cách sử dụng caretgói. Khi tôi áp dụng mô hình MARS thì tôi nhận được sai số tuyệt đối trung bình (MAE) xấp xỉ 4 trên tập huấn luyện cũng như trên testset.

Tuy nhiên, áp dụng xgboost (thuật toán cây hoặc tuyến tính), tôi nhận được một cái gì đó như 0,32 (!) Trên tập huấn luyện và 2,4 trên tập kiểm tra.

Do đó, nếu lỗi kiểm tra là 8 lần lỗi đào tạo thì tôi sẽ nói: Tôi có quá nhiều dữ liệu đào tạo. Tôi vẫn nhận được một lỗi nhỏ hơn trên mọi cách kiểm tra.

Tôi sử dụng các tham số sau trên xgboost:

  • nrounds = 1000eta = 0.01(tăng nround và giảm eta có thể giúp nhưng tôi hết bộ nhớ và thời gian chạy quá dài)
  • max_depth = 16: nếu tôi so sánh các bài đăng khác và mặc định là 6 thì điều này có vẻ lớn nhưng vấn đề khá phức tạp - có thể 16 không quá lớn trong trường hợp này.
  • colsample_bytree = 0.7, subsample = 0.8min_child_weight = 5: làm điều này tôi cố gắng giảm bớt overfit.

Nếu tôi giảm max_depth thì đào tạo và kiểm tra lỗi tiến gần hơn nhưng vẫn có một khoảng cách lớn và lỗi kiểm tra lớn hơn (một chút trên 3).

Sử dụng bộ tăng tốc tuyến tính, tôi nhận được cùng một lỗi thử nghiệm và thử nghiệm trên các phép đo tối ưu:

  • lambda = 90 và `alpha = 0: được tìm thấy bằng xác nhận chéo, lambda sẽ ngăn chặn quá mức.
  • colsample_bytree = 0.8, subsample = 0.8min_child_weight = 5: làm điều này tôi cố gắng giảm bớt overfit.

Cảm giác của tôi là xgboost vẫn mặc trang phục - nhưng lỗi đào tạo và theo như tôi có thể thấy trong thử nghiệm thời gian thực (tôi đã sử dụng các mô hình xgboost và một bộ đồng phục của chúng trong thực tế trong 4 ngày) có vẻ ok-ish (lỗi là lớn hơn lỗi kiểm tra nhưng có nhiều sự không chắc chắn trong cuộc sống thực về dự báo các tính năng và các biến khác).

Bạn nghĩ gì: tôi có thể chấp nhận overfit nếu (nếu điều này là có thể) hiệu suất thực tế là vượt trội? Xgboost trong cài đặt của tôi có xu hướng quá phù hợp?

Câu trả lời:


34

Là quá nhiều đến nỗi bạn không nên chọn một mô hình quá phù hợp, mặc dù lỗi kiểm tra của nó là nhỏ hơn? Không. Nhưng bạn nên có lý do để chọn nó.

Hành vi này không bị hạn chế đối với XGBoost. Đây là một chủ đề phổ biến trong số tất cả các kỹ thuật máy học; tìm kiếm sự đánh đổi đúng đắn giữa thiếu và thừa. Định nghĩa chính thức là sự đánh đổi Bias-variance (Wikipedia) .

Sự đánh đổi sai lệch

Sau đây là đơn giản hóa sự đánh đổi Bias-variance, để giúp chứng minh sự lựa chọn mô hình của bạn.

  • Chúng tôi nói rằng một mô hình có độ lệch cao nếu nó không thể sử dụng đầy đủ thông tin trong dữ liệu. Nó quá phụ thuộc vào thông tin chung, chẳng hạn như trường hợp thường xuyên nhất, giá trị trung bình của phản hồi hoặc một vài tính năng mạnh mẽ. Xu hướng có thể đến từ các giả định sai, vì ví dụ giả định rằng các biến thường được phân phối hoặc mô hình là tuyến tính.

  • Chúng tôi nói rằng một mô hình có phương sai cao nếu nó sử dụng quá nhiều thông tin từ dữ liệu. Nó chỉ dựa vào thông tin được tiết lộ trong tập huấn luyện đã được trình bày cho nó, không đủ khái quát. Thông thường, mô hình sẽ thay đổi rất nhiều nếu bạn thay đổi tập huấn luyện, do đó tên "phương sai cao".

Những định nghĩa này rất giống với các định nghĩa về thiếu và thừa. Tuy nhiên, những định nghĩa đó thường quá đơn giản để trở thành đối lập, như trong

  • Mô hình bị thiếu hụt nếu cả lỗi đào tạo và kiểm tra đều cao. Điều này có nghĩa là mô hình quá đơn giản.
  • Mô hình bị quá mức nếu lỗi kiểm tra cao hơn lỗi đào tạo. Điều này có nghĩa là mô hình quá phức tạp.

Những đơn giản hóa này tất nhiên là hữu ích, vì chúng giúp chọn đúng độ phức tạp của mô hình. Nhưng họ bỏ qua một điểm quan trọng, thực tế là (hầu hết) mọi mô hình đều có cả thành phần sai lệch và thành phần phương sai. Mô tả thiếu / quá mức cho bạn biết rằng bạn có quá nhiều sai lệch / quá nhiều phương sai, nhưng bạn (hầu như) luôn có cả hai .

Nếu bạn muốn biết thêm thông tin về sự đánh đổi sai lệch thiên vị, chúng có rất nhiều hình ảnh hữu ích và nguồn tài nguyên tốt có sẵn thông qua google. Mỗi sách giáo khoa máy học sẽ có một phần về sự đánh đổi sai lệch, đây là một vài

  • Giới thiệu về học thống kê và các yếu tố của học thống kê (có sẵn ở đây) .
  • Nhận dạng mẫu và học máy, bởi Christopher Bishop.
  • Học máy: Một quan điểm xác suất, của Kevin Murphy.

Ngoài ra, một bài đăng trên blog rất hay giúp tôi nắm bắt được là Hiểu về thương mại Bias-Variance của Scott Fortmann-Roe .

Áp dụng cho vấn đề của bạn

Vì vậy, bạn có hai mô hình,

Đào tạo MAEKiểm tra MAESAO HOẢ~4.0~4.0Phương sai thấp, độ lệch cao hơn,XGBoost~0,3~2.4Phương sai cao hơn, sai lệch thấp hơn,

và bạn cần chọn một. Để làm như vậy, bạn cần xác định thế nào là một mô hình tốt hơn. Các tham số nên được bao gồm trong các quyết định của bạn là độ phức tạp và hiệu suất của mô hình.

  • Có bao nhiêu "đơn vị" phức tạp mà bạn sẵn sàng trao đổi cho một "đơn vị" hiệu suất?
    • Sự phức tạp hơn có liên quan đến phương sai cao hơn. Nếu bạn muốn mô hình của mình khái quát tốt trên một tập dữ liệu khác một chút so với mô hình bạn đã đào tạo, bạn nên nhắm đến sự phức tạp ít hơn.
    • Nếu bạn muốn một mô hình mà bạn có thể hiểu dễ dàng, bạn có thể làm điều đó với chi phí hiệu suất bằng cách giảm độ phức tạp của mô hình.
    • Nếu bạn đang nhắm đến hiệu suất tốt nhất trên tập dữ liệu mà bạn biết xuất phát từ cùng một quy trình tổng quát so với tập huấn luyện của bạn, bạn có thể thao tác độ phức tạp để tối ưu hóa lỗi kiểm tra của mình và sử dụng số liệu này làm số liệu. Điều này xảy ra khi tập huấn luyện của bạn được lấy mẫu ngẫu nhiên từ một tập lớn hơn và mô hình của bạn sẽ được áp dụng trên tập này. Đây là trường hợp trong hầu hết các cuộc thi Kaggle, ví dụ.

Mục tiêu ở đây không phải là tìm ra một mô hình "không phù hợp". Đó là tìm ra mô hình có sự đánh đổi sai lệch sai lệch tốt nhất. Trong trường hợp này, tôi sẽ lập luận rằng việc giảm độ lệch hoàn thành của mô hình XGBoost là đủ tốt để biện minh cho sự gia tăng của phương sai.

Bạn có thể làm gì

Tuy nhiên, bạn có thể có thể làm tốt hơn bằng cách điều chỉnh các siêu đường kính.

  • Tăng số lượng vòng và giảm tỷ lệ học tập là một khả năng. Một điều "kỳ lạ" về việc tăng cường độ dốc là việc chạy tốt đến mức mà lỗi đào tạo đã giảm về 0 dường như vẫn cải thiện lỗi kiểm tra (như đã thảo luận ở đây: Chỉ sâu hơn khi tốt hơn? ). Bạn có thể cố gắng đào tạo mô hình của mình lâu hơn một chút trên tập dữ liệu của mình sau khi bạn đã đặt các tham số khác,

  • 1/214. Đây có thể là biệt ngữ, nhưng nếu các tính năng của bạn có mức độ tương tác là 3 (Roughly: Sự kết hợp của 4 tính năng không mạnh hơn sự kết hợp của 3 trong số các tính năng đó + thứ tư), thì việc trồng cây có kích thước lớn hơn 3 là bất lợi. Hai cây có độ sâu ba sẽ có sức mạnh khái quát hơn một cây có độ sâu bốn. Đây là một khái niệm khá phức tạp và tôi sẽ không đi sâu vào nó ngay bây giờ, nhưng bạn có thể kiểm tra bộ sưu tập giấy tờ này để bắt đầu. Ngoài ra, lưu ý rằng cây sâu dẫn đến phương sai cao!

  • Sử dụng mẫu phụ, được gọi là đóng bao , là tuyệt vời để giảm phương sai. Nếu các cây riêng lẻ của bạn có phương sai cao, việc đóng bao sẽ làm trung bình các cây và trung bình có ít phương sai hơn các cây riêng lẻ. Nếu, sau khi điều chỉnh độ sâu của cây, bạn vẫn gặp phải phương sai cao, hãy thử tăng mẫu phụ (nghĩa là giảm phần dữ liệu được sử dụng). Lấy mẫu của không gian tính năng cũng đạt được mục tiêu này.


1
Người ta không nên bình luận nói "cảm ơn" nhưng đối với câu trả lời dài và thú vị này tôi muốn nói "cảm ơn". Tôi đã có một số kiến ​​thức về một số điều bạn viết nhưng điều này thực sự được kết hợp độc đáo. Tôi sẽ xem qua một số tài liệu tham khảo của bạn và trồng cây mới và có thể quay lại với một nhận xét. Để bây giờ: cảm ơn! Tuyệt quá!
Ric

Liên kết đến trang tương tác stat.columbia.edu/~jakulin/Int thực sự tuyệt vời!
Ric

Tôi đã lấy lời khuyên của bạn và giới hạn độ sâu của cây xuống còn 3 nhưng lấy khoảng 1200 và cảm giác tuyệt vời: tính toán rất nhanh, sự khác biệt giữa tàu và kiểm tra giảm và vẫn ở mức tốt. Phần còn lại của câu chuyện là ở đây: stats.stackexchange.com/questions/205858/NH
Ric
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.