Ich verwende Rs Implementierung von XGboost und Random Forest, um Prognosen für den Umsatz für einen Tag im Voraus zu erstellen. Ich habe ungefähr 200 Zeilen und 50 Prädiktoren. (Wenn ich mit der Zeit weiter gehe, habe ich mehr Daten, also mehr Zeilen).
Das XGBoost-Modell mit den folgenden Parametern ist in Bezug auf den mittleren quadratischen Fehler 6% schlechter als ein Standard-Zufallswaldmodell. Darüber hinaus ist das Zufallswaldmodell etwas genauer als ein autoregressives Zeitreihen-Prognosemodell. (Ich habe Arimax noch nicht ausprobiert).
Für Xgboost habe ich versucht, eta auf 0,02 und num_rounds auf 8.000 zu ändern, aber jetzt dauert die Ausführung lange. Gibt es eine Anleitung, mit der ich die Prognosegenauigkeit des xgboost-Modells verbessern kann? Benutze ich die Multi-Core-Funktion richtig?
Ich habe das Gefühl, als würde ich mit einer geringen Auszahlung im Dunkeln herumgreifen. Wenn es hilft, verwende ich ein Core I7 mit 12 GB RAM unter Windows 7 Professional. Ich freue mich über Ihre Hilfe!
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)
quelle
Antworten:
Der einfachste Weg, die
num_rounds
Optimierung des Parameters durchzuführen, besteht darin, XGBoost dies für Sie tun zu lassen. Sie können denearly_stopping_rounds
Parametern
in dertrain
Methode auf einstellen und das Modell beendet das Training, sobald der Fehler fürn
Runden nicht abgenommen hat .Siehe dieses Beispiel aus dem Liberty Mutual Kaggle-Wettbewerb :
Wie im folgenden Code angegeben, müssen Sie auch den
watchlist
Parameter verwenden, um ein vorzeitiges Stoppen zu ermöglichen.quelle