Xu hướng cộng gộp trong xgboost (và hiệu chỉnh của nó?)


9

Tôi đang tham gia một cuộc thi ngay bây giờ. Tôi biết công việc của mình là làm tốt điều đó, nhưng có lẽ ai đó muốn thảo luận về vấn đề của tôi và giải pháp của nó ở đây vì điều này có thể là chính mình cho những người khác trong lĩnh vực của họ.

Tôi đã đào tạo một mô hình xgboost (một mô hình dựa trên cây và một mô hình tuyến tính và một nhóm gồm cả hai). Như đã thảo luận ở đây , lỗi tuyệt đối trung bình (MAE) trên tập huấn luyện (trong đó tôi đã xác thực chéo) là nhỏ (khoảng 0,3) sau đó trong bài kiểm tra đã đặt, lỗi là khoảng 2.4. Sau đó, cuộc thi bắt đầu và lỗi là khoảng 8 (!) Và đáng ngạc nhiên là dự báo luôn cao hơn khoảng 8-9 so với giá trị thực !! Xem khu vực được khoanh tròn màu vàng trong hình:

nhập mô tả hình ảnh ở đây

Tôi phải nói rằng khoảng thời gian của dữ liệu đào tạo đã kết thúc vào 15/10 và cuộc thi bắt đầu ngay bây giờ (16 tháng 4 với thời gian thử nghiệm khoảng 2 tuần vào tháng 3).

Hôm nay tôi chỉ trừ các giá trị không đổi là 9 từ dự báo của tôi và lỗi đã giảm xuống còn 2 và tôi có số 3 trên bảng dẫn (trong một ngày này). ;) Đây là phần bên phải của đường màu vàng.

Vì vậy, những gì tôi muốn thảo luận:

  • Xgboost phản ứng thế nào khi thêm một thuật ngữ chặn vào phương trình mô hình? Điều này có thể dẫn đến sai lệch nếu hệ thống thay đổi quá nhiều (như trong trường hợp của tôi từ ngày 15 tháng 10 đến ngày 16 tháng 4)?
  • Một mô hình xgboost mà không bị chặn có thể mạnh hơn để dịch chuyển song song trong giá trị đích không?

Tôi sẽ tiếp tục trừ đi độ lệch 9 của mình và nếu có ai quan tâm tôi có thể chỉ cho bạn kết quả. Nó sẽ chỉ thú vị hơn để có được cái nhìn sâu sắc hơn ở đây.


Âm thanh như bạn đã thay đổi mô hình của mình theo cách thủ công dựa trên dữ liệu thử nghiệm, vì vậy, nó tốt hơn, nhưng nó không thể tái tạo. Mô hình của bạn phù hợp với độ cong của dữ liệu khá tốt, lý do lỗi trong khu vực này dường như là lúc bắt đầu, khi đường màu đỏ giảm mạnh trong khi đường màu xanh tăng. Tôi sẽ cố gắng tìm cách mô hình hóa hành vi này.
Nháy mắt

@Winks cảm ơn vì đã trở lại với tôi! Tôi phải nói rằng đã có một giai đoạn thử nghiệm trước khi thi đấu và thậm chí có lỗi 8-9 và luôn luôn tích cực ... vì vậy nó không chỉ là động thái trong phần đầu của ảnh chụp màn hình mà toàn bộ hệ thống đã thay đổi. Các đối thủ cạnh tranh khác dường như có nó ngay từ đầu ... vì vậy, có lẽ tôi chỉ xấu .. hoặc họ sử dụng dữ liệu tốt hơn. Bây giờ tôi chỉ ngạc nhiên khi thấy lỗi xấu này trong khi mọi thứ đều mạnh mẽ trong dữ liệu đào tạo (và phân tách kiểm tra / kiểm tra và xác thực x ...).
Ric

Câu trả lời:


3

Tôi sẽ tự trả lời và cho bạn biết những phát hiện của tôi trong trường hợp có ai quan tâm.

Đầu tiên là sự thiên vị: Tôi đã dành thời gian để thu thập tất cả các dữ liệu gần đây và định dạng nó bị sai lệch, v.v. Tôi nên làm điều này từ lâu trước đây. Hình ảnh như sau:

nhập mô tả hình ảnh ở đây

Bạn thấy dữ liệu từ cuối năm 2015 và sau đó là ngày 16 tháng 4. Mức giá hoàn toàn khác nhau. Một mô hình được đào tạo về dữ liệu năm 2015 không thể có được sự thay đổi này.

Thứ hai: Sự phù hợp của xgboost. Tôi thực sự thích thiết lập sau đây. lỗi đào tạo và kiểm tra đã gần rất nhiều và vẫn còn tốt:

xgb_grid_1 <- expand.grid(
    nrounds = c(12000),
    eta = c(0.01),
    max_depth = c(3),
    gamma = 1,
    colsample_bytree = c(0.7),
    min_child_weight = c(5) 
  )

  xgb_train_1 <- train(
    x = training,y = model.data$Price[inTrain],
    trControl = ctrl,
    tuneGrid = xgb_grid_1,
    method="xgbTree" 
   ,subsample = 0.8
    )

Do đó tôi sử dụng rất nhiều cây và tất cả chúng đều sâu tối đa 3 lần (như khuyến nghị ở đây ). Thực hiện phép tính này là nhanh chóng (kích thước cây tăng lên theo hệ số 2 với mỗi lần phân tách) và sự phù hợp dường như bị giảm đi.

Tóm tắt của tôi: sử dụng cây với một số lượng nhỏ lá nhưng rất nhiều trong số chúng và tìm kiếm dữ liệu gần đây. Đối với cuộc thi, điều này thật không may mắn cho tôi ...


Cảm ơn bạn đã chia sẻ điều này (+1). Chỉ cần hỏi rõ ràng về mã của bạn: Bạn rõ ràng không tìm kiếm dọc theo lưới ở đây. Chỉ cần đào tạo (và lấy lại số liệu thống kê) cho một cài đặt tham số duy nhất. Bạn đã đi qua "3" bằng cách sử dụng các giá trị tham số khác nhau? Là "3" tối ưu dựa trên RMSE hoặc một số tiêu chí khác?
usεr11852

@ usεr11852 Trong "những ngày đầu tiên" của tôi với xgoost, tôi đã chọn max_depth quá lớn. Nếu bạn theo liên kết trong câu trả lời của tôi ("ở đây") thì bạn sẽ thấy một cuộc thảo luận. Cuối cùng tôi chỉ chọn 3. Như đã nêu trong đoạn mã trên, bạn có thể sử dụng gói caret để thực hiện tìm kiếm dạng lưới, thay vào đó tôi nhớ bạn có thể sử dụng một số thói quen trong xgboost và gần đây tôi đã bắt đầu sử dụng mlr tương tự. Càng nhiều tiếng ồn bạn càng thấp tôi chọn độ sâu (thường chỉ 1 hoặc 2).
Ric

Cảm ơn bạn đã trả lời nhưng đó không phải là điều tôi đang hỏi trong bình luận của mình: D. Tôi đã đọc liên kết ("ở đây") trước nhận xét của tôi nhưng bạn không nhận xét độ sâu nào là tối ưu dựa trên tiêu chí của bạn (MAE?) Chỉ rằng " Tôi đã đưa ra lời khuyên của bạn ... đến 3 nhưng ... ". Vì vậy, "3" tối ưu dựa trên lỗi RMSE / MAE của bạn hay còn gì nữa (sai lệch tối thiểu giữa lỗi kiểm tra / huấn luyện)? Ví dụ: tôi thường xuyên tìm kiếm lưới trực tiếp độ sâu của cây nhưng có thể bạn đã không sử dụng "3"?
usεr11852

Nghiêm bình luận khôn ngoan, tại sao bạn di chuyển từ carettới mlr? Đối với tôi họ có vẻ khá chồng chéo mua có lẽ tôi đang bỏ lỡ một cái gì đó khác.
usεr11852

@ usεr11852 cho nhận xét đầu tiên: nếu đây là một cuộc thi ML thì rất có thể bạn nên tìm kiếm theo chiều sâu. Đây là một cuộc thi dự báo với một tín hiệu rõ ràng và trong tâm trí của tôi, việc lựa chọn các tính năng tốt (ví dụ về biến thời tiết) là quan trọng hơn. Vì mục tiêu đã thực hiện chuyển đổi chế độ, tôi không có đủ dữ liệu đại diện trong suốt quá trình trực tiếp nên tôi chỉ mất ba độ sâu.
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.