我正在使用 R 的 XGboost 和随机森林实现来生成提前 1 天的收入预测。我有大约 200 行和 50 个预测变量。(随着时间的推移,我有更多的数据,所以更多的行)。
具有以下参数的 XGBoost 模型在均方误差方面比现成的随机森林模型差 6%。此外,随机森林模型比自回归时间序列预测模型更准确。(我还没有尝试过 Arimax)。
对于 Xgboost,我尝试将 eta 更改为 0.02,将 num_rounds 更改为 8,000,但现在运行需要很长时间。是否有某种指南可用于提高 xgboost 模型的预测准确性?我是否正确使用了多核功能?
我觉得我好像在黑暗中获得边际收益。如果有帮助,我正在使用带有 12gb ram 的核心 I7,运行 Windows 7 Professional。感谢您的帮助!
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)