R H2O - XGBoost - Вторая модель вызывает исключение нулевой точки Java - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь реализовать некоторый тип поиска генетического гиперпараметра в xgboost для моделей R H2O. Тем не менее, я получаю некоторые странные ошибки, которые я не могу понять. Код, приведенный ниже, всегда работает правильно для первого ряда, но обучение второго ряда всегда завершается неудачей, независимо от параметров по населению.

for(row in seq(nrow(population))){
model <- h2o.xgboost(x = colnames(dados_analiseProcessedFinalh2o)[-c(1:4)], 
                    y = "Erro", training_frame = dados_analiseProcessedFinalh2o, nfolds = 5,
                    model_id = paste("model", row, round(runif(1)*100), sep = "_"),
                    keep_cross_validation_predictions = T, keep_cross_validation_fold_assignment = T, 
                    fold_assignment = "Stratified", distribution = "bernoulli", 
                    ntrees = population[row,]$ntrees, max_depth = population[row,]$max_depth, 
                    min_rows = population[row,]$min_rows, sample_rate = population[row,]$sample_rate,
                    col_sample_rate = population[row,]$col_sample_rate, 
                    col_sample_rate_per_tree =  population[row,]$col_sample_rate_per_tree, 
                    min_split_improvement = population[row,]$min_split_improvement, 
                    learn_rate = population[row,]$learn_rate, 
                    max_abs_leafnode_pred = population[row,]$max_abs_leafnode_pred, 
                    tree_method = levels(population[row,]$tree_method)[population[row,]$tree_method],
                    grow_policy = levels(population[row,]$grow_policy)[population[row,]$grow_policy], 
                    booster = levels(population[row,]$booster)[population[row,]$booster],
                    reg_lambda = population[row,]$reg_lambda
                    )
population[row,]$logloss = h2o.performance(model, xval = T)@metrics$logloss
population[row,]$modelName = h2o.saveModel(object=model, path=getwd(), force=TRUE)
}

Ошибка, которую я получаю, всегда

java.lang.NullPointerException

java.lang.NullPointerException
    at hex.ModelMetricsBinomial.make(ModelMetricsBinomial.java:106)
    at hex.ModelMetricsBinomial.make(ModelMetricsBinomial.java:75)
    at hex.tree.xgboost.XGBoostModel.makePreds(XGBoostModel.java:373)
    at hex.tree.xgboost.XGBoostModel.makeMetrics(XGBoostModel.java:303)
    at hex.tree.xgboost.XGBoostModel.makeMetrics(XGBoostModel.java:296)
    at hex.tree.xgboost.XGBoostModel.doScoring(XGBoostModel.java:430)
    at hex.tree.xgboost.XGBoost$XGBoostDriver.doScoring(XGBoost.java:602)
    at hex.tree.xgboost.XGBoost$XGBoostDriver.scoreAndBuildTrees(XGBoost.java:547)
    at hex.tree.xgboost.XGBoost$XGBoostDriver.buildModel(XGBoost.java:529)
    at hex.tree.xgboost.XGBoost$XGBoostDriver.computeImpl(XGBoost.java:473)
    at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:206)
    at water.H2O$H2OCountedCompleter.compute(H2O.java:1263)
    at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
    at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
    at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
    at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
    at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)

Error: java.lang.NullPointerException
In addition: Warning messages:
1: In .h2o.startModelJob(algo, params, h2oRestApiVersion) :
  Dropping bad and constant columns: [X0, MOVS_UPCARD_UPGRADE, MOVS_DOWNCARD_UPGRADE, T, MOVS_EQCARD_UPGRADE].

2: In .h2o.startModelJob(algo, params, h2oRestApiVersion) :


 Error: java.lang.NullPointerException

Это похоже на некоторую ошибку, которую я получил, когда пытался последовательно запустить поиск по сетке. Н2О не в состоянии справиться с повторной примеркой?

...