2016-12-05 2 views
0

Ich versuche, "Early.Stop.round" -Funktion von xgb.train (xgboost-Bibliothek - R) auf Validaiton-Set, mithilfe einer benutzerdefinierten Bewertungsmetrik (dh " feval "Funktion). Allerdings bekomme ich folgende Fehlermeldung:Xgboost early.stop.round Fehler mit benutzerdefinierten Metrik

xgbMatrixTrain <- xgb.DMatrix(as.matrix(train[,-c(1,2)]), label   =train$y,missing="NAN") 
xgbMatrixValid <- xgb.DMatrix(as.matrix(valid[,-c(1,2)]), label = valid$y,  missing="NAN") 


MAE <- function(preds, dtrain) { 

labels <- getinfo(dtrain, "label") 
err <- as.numeric(sum(abs(exp(labels) - exp(preds))))/length(labels) 
    return(list(metric = "mae error", value = err)) 
} 

myWatch <- list(val=xgbMatrixValid,train=xgbMatrixTrain) 
bst.mae2<- xgb.train(params = param.noerr, 
       data = xgbMatrixTrain, 
       feval = MAE,      nround=150, 
        print.every.n = 1, 
        watchlist=myWatch, 
        early.stop.round = 20, 
       maximize = FALSE) 

[0] val-mae error:0.59831651363868 train-mae error:0.598864823842993 

Fehler if ((maximieren & & Score> Bestscore) || (maximieren & & Score <: fehlenden Wert wo WAHR/FALSCH benötigt

Durch den Verzicht auf die Funktion Stoppfunktion kann ich diesen Fehler vermeiden.Eine Idee, wie Sie dies lösen können, indem Sie gleichzeitig die Stoppuhrfunktion beibehalten:

Vielen Dank euch allen! Leo

Antwort

0

Ohne ein reproduzierbares Beispiel kann ich Ihren Code nicht ausführen. Der Fehler, den Sie erhalten, hat möglicherweise nichts mit Ihrem Code zu tun, sondern kann aus Fehlern in Ihren Daten bestehen, aber schwer zu sagen ohne Daten! Ich habe Fehler msg wie Ihre gesehen, wenn 0 oder 1 Werte in einer binären Antwortvariablen fehlen. Xgboost behandelt nur numerische Daten, so dass dies eine Überprüfung wert sein könnte. Fehlt die fehlende = "NAN" in Ihren Daten? Was passiert, wenn Sie Zeilen mit der fehlenden Antwort entfernen? HTH, cousin_pete