XG Boost vs Rừng ngẫu nhiên để dự báo hồi quy chuỗi thời gian


7

Tôi đang sử dụng triển khai XGboost và Rừng ngẫu nhiên của R để tạo dự báo trước 1 ngày cho doanh thu. Tôi có khoảng 200 hàng và 50 dự đoán. (Khi tôi đi xa hơn trong thời gian tôi có nhiều dữ liệu hơn nên nhiều hàng hơn).

Mô hình XGBoost với các tham số dưới đây kém hơn 6% so với mô hình rừng ngẫu nhiên ngoài giá trị đối với lỗi bình phương trung bình. Hơn nữa, mô hình rừng ngẫu nhiên chính xác hơn một chút so với mô hình dự báo chuỗi thời gian tự phát. (Tôi chưa thử Arimax nhưng tbh).

Đối với Xgboost, tôi đã thử thay đổi eta thành 0,02 và num_rounds thành 8.000, nhưng bây giờ phải mất một thời gian dài để chạy. Có một số loại hướng dẫn mà tôi có thể sử dụng để cải thiện độ chính xác dự báo của mô hình xgboost? Tôi có đang sử dụng tính năng đa lõi đúng cách không?

Tôi cảm thấy như thể tôi đang đi xung quanh trong bóng tối với tiền thưởng cận biên. Nếu nó giúp, tôi đang sử dụng lõi I7 với ram 12gb, chạy Windows 7 Professional. Tôi đánh giá cao sự giúp đỡ của bạn!

rf.mod = randomForest(act ~ ., data = train)
rf.pred = predict(rf.mod, newdata = test)
#####################################
train_x <- sparse.model.matrix(~., data = train[,2:ncol(train)])
train_y <- train$act
test_x <- sparse.model.matrix(~., data = test)

xgtrain <- xgb.DMatrix(data = train_x, label= train_y)
xgtest <- xgb.DMatrix(data = test_x)

num_rounds <- 1000 

evalgini <- function(preds, dtrain) {
  labels <- getinfo(dtrain, "label")
  err <- NormalizedGini(as.numeric(labels),as.numeric(preds))
  return(list(metric = "Gini", value = err))
}
param <- list("objective" = "reg:linear",
              "eta" = 0.2,
              "min_child_weight" = 5,
              "subsample" = .8,
              "colsample_bytree" = .8,
              "scale_pos_weight" = 1.0,
              "max_depth" = 8)
xg.mod <- xgb.train(params = param, data = xgtrain, feval = evalgini, nround=num_rounds, print.every.n = num_rounds, maximize = TRUE)
xg.pred <- predict(xg.mod ,xgtest)

Với 200 hàng dữ liệu, tôi rất ngạc nhiên khi nghe bạn nói điều gì đó "mất nhiều thời gian để chạy". Bao lâu là "dài?"
Jacob

Câu trả lời:


4

Cách dễ nhất để xử lý 'điều chỉnh' num_roundstham số là để XGBoost làm điều đó cho bạn. Bạn có thể đặt early_stopping_roundstham số ntrong trainphương thức và mô hình sẽ dừng đào tạo khi lỗi không giảm cho các nvòng.

Xem ví dụ này từ Cuộc thi Mutual Kaggle :

Như đã lưu ý trong đoạn mã dưới đây, bạn cũng cần sử dụng watchlisttham số để cho phép dừng sớm.

    # You can write R code here and then click "Run" to run it on our platform

# The readr library is the best way to read and write CSV files in R
library(readr)
library(xgboost)
library(data.table)
library(Matrix)
library(caret)

# The competition datafiles are in the directory ../input
# Read competition data files:
train <- read_csv("../input/train.csv")
test <- read_csv("../input/test.csv")

# Generate output files with write_csv(), plot() or ggplot()
# Any files you write to the current directory get shown as outputs

# keep copy of ID variables for test and train data
train_Id <- train$Id
    test_Id <- test$Id

# response variable from training data
train_y <- train$Hazard

# predictor variables from training
train_x <- subset(train, select = -c(Id, Hazard))
train_x <- sparse.model.matrix(~., data = train_x)

# predictor variables from test
test_x <- subset(test, select = -c(Id))
test_x <- sparse.model.matrix(~., data = test_x)

# Set xgboost parameters
param <- list("objective" = "reg:linear",
              "eta" = 0.05,
              "min_child_weight" = 10,
              "subsample" = .8,
              "colsample_bytree" = .8,
              "scale_pos_weight" = 1.0,
              "max_depth" = 5)

# Using 5000 rows for early stopping. 
offset <- 5000
num_rounds <- 1000

# Set xgboost test and training and validation datasets
xgtest <- xgb.DMatrix(data = test_x)
xgtrain <- xgb.DMatrix(data = train_x[offset:nrow(train_x),], label= train_y[offset:nrow(train_x)])
xgval <-  xgb.DMatrix(data = train_x[1:offset,], label= train_y[1:offset])

# setup watchlist to enable train and validation, validation must be first for early stopping
watchlist <- list(val=xgval, train=xgtrain)
# to train with watchlist, use xgb.train, which contains more advanced features

# this will use default evaluation metric = rmse which we want to minimise
bst1 <- xgb.train(params = param, data = xgtrain, nround=num_rounds, print.every.n = 20, watchlist=watchlist, early.stop.round = 50, maximize = FALSE)
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.