2016-12-05 66 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