2016-05-16 13 views
1

Ich verwende gbm, um ein prädiktives Regressionsmodell zu erstellen. Ich habe Zug und Test-Sets (vordefiniert und NICHT zufällig ausgewählt). Im Folgenden finden Sie eine Übersicht über den Code.Nicht in der Lage, Testvorhersagen mit gbm zu reproduzieren

Ich habe rund 600 Zeilen in Zugdaten und 150 Zeilen in Testdaten. Ich weiß, dass sie sehr viel weniger sind, aber immer noch.

train <- .... 
test <- .... 

set.seed(123) 
model <- gbm(target ~., data = train, 
       distribution = "gaussian", 
       n.trees = 4000, 
       interaction.depth = 2, 
       n.minobsinnode = 5, 
       shrinkage = 0.01, 
       bag.fraction = 1, 
       train.fraction = .95, 
       verbose = TRUE 
      ) 

best_iter <- gbm.perf(model) 

set.seed(123) 
predictions <- predict(model, newdata = test, n.trees = best_iter) 

set.seed(123) 
predictions <- predict(model, newdata = train, n.trees = best_iter) 

Irgendwie, wenn ich das GBM Modell immer wieder mit genau den gleichen Parametern laufen bin ich nicht in der Lage Prognosen auf dem Testset zu reproduzieren. Aber gleichzeitig kann ich immer Vorhersagen im Zug nachbilden. Ich setze auch Samen, bevor ich das Modell baue und Vorhersagen mache. Kann mir bitte jemand helfen, herauszufinden, was passiert? Bitte beachten Sie, dass Trainings- und Testdaten immer gleich bleiben, ich ändere sie nicht bei jedem Lauf.

+2

Schwierig, ohne Daten zu beantworten. –

Antwort

0

Haben Sie jemals das Problem herausgefunden? Ich mache den gleichen Modellansatz wie Sie und der einzige Unterschied in unserem Code, den ich sehen kann, ist Ihr Ruf zu prognostizieren. Sie könnten versuchen, die abhängige Variable für Zug und Test aus den neuen Daten zu entfernen. Setzen Sie auch n.trees direkt, nicht sicher, was Sie gerade so bekommen, wie Sie es haben. Und speichern Sie die Vorhersagen in zwei separaten Objekten.

PredEst <- predict(model, newdata = train[-which(names(train) %in% as.character("target"))], n.trees = 4000) 

PredVal <- predict(model, newdata = test[-which(names(test) %in% as.character("target"))], n.trees = 4000)