Я пытаюсь реализовать некоторый тип поиска генетического гиперпараметра в 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О не в состоянии справиться с повторной примеркой?