2016-12-05 185 views
0

我試圖使用「early.stop.round」函數的xgb.train(xgboost庫-R)在validaiton集,通過使用自定義評估指標(即「 feval「功能)。不過,我得到了以下錯誤消息:Xgboost early.stop.round錯誤與自定義指標

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 

錯誤,如果((最大化& &得分> bestScore)||(最大化& &得分<: 缺失值,其中TRUE/FALSE需要

通過不使用停止輪功能,我可以避免這個錯誤。關於如何解決這個問題,通過同時保留停止輪功能的任何想法?

非常感謝你! 獅子座

回答

0

沒有可重現的例子我無法運行您的代碼。 您得到的錯誤可能與您的代碼無關,但可能來自您的數據中的錯誤,但很難說沒有數據! 當在二進制響應變量中缺少0或1個值時,我看到類似於你的錯誤消息。 Xgboost只處理數字數據,所以這可能值得一檢查。 缺少=「NAN」是否會導致數據出現問題? 如果您刪除缺少響應的行,會發生什麼情況? HTH,cousin_pete