在H2O中尝试通过java运行AutoML时,总是得到一个java.lang.ArrayIndexOutOfBoundsException

问题描述 投票:1回答:1

我正在使用H2O 3.20.0.5来训练一些模型。

我想在我的java代码中使用AutoML构建模型。现在我可以导入和解析csv文件。但是当我试着打电话给AutoML.startAutoML().get()时,我总是得到一个java.lang.ArrayIndexOutOfBoundsException in ModelBuilder.java

好像在ModelBuilder中没有定义任何ALGOBASES。但我正在使用AutoML,它应该自动创建算法。所以我完全糊涂了。这是我的代码:

private static void trainByAutoML(Frame frame, String projectName) throws FileNotFoundException {

    AutoMLBuildSpec autoMLBuildSpec = new AutoMLBuildSpec();

    autoMLBuildSpec.input_spec.training_frame = frame._key;
    autoMLBuildSpec.input_spec.response_column = "level";
    autoMLBuildSpec.input_spec.sort_metric = "AUTO";

    autoMLBuildSpec.build_control.balance_classes = true;
    autoMLBuildSpec.build_control.class_sampling_factors = new float[2];
    autoMLBuildSpec.build_control.class_sampling_factors[0] = 1.0f;
    autoMLBuildSpec.build_control.class_sampling_factors[1] = 1.0f;
    autoMLBuildSpec.build_control.nfolds = nfolds;
    autoMLBuildSpec.build_control.keep_cross_validation_models = false;
    autoMLBuildSpec.build_control.keep_cross_validation_predictions = true;
    autoMLBuildSpec.build_control.project_name = projectName;
    HyperSpaceSearchCriteria.RandomDiscreteValueSearchCriteria randomDiscreteValueSearchCriteria = new HyperSpaceSearchCriteria.RandomDiscreteValueSearchCriteria();
    randomDiscreteValueSearchCriteria.set_max_runtime_secs(Double.parseDouble(autoModelRuntimeSeconds));
    randomDiscreteValueSearchCriteria.set_stopping_metric(ScoreKeeper.StoppingMetric.AUTO);
    randomDiscreteValueSearchCriteria.set_stopping_tolerance(0.0);
    autoMLBuildSpec.build_control.stopping_criteria = randomDiscreteValueSearchCriteria;

    AutoMLBuildSpec.AutoMLBuildModels autoMLBuildModels = new AutoMLBuildSpec.AutoMLBuildModels();
    autoMLBuildModels.exclude_algos = new AutoML.algo[4];
    autoMLBuildModels.exclude_algos[0] = AutoML.algo.DRF;
    autoMLBuildModels.exclude_algos[1] = AutoML.algo.GBM;
    autoMLBuildModels.exclude_algos[2] = AutoML.algo.GLM;
    autoMLBuildModels.exclude_algos[3] = AutoML.algo.StackedEnsemble;

    autoMLBuildSpec.build_models = autoMLBuildModels;

    AutoML aml = AutoML.makeAutoML(Key.make(), new Date(), autoMLBuildSpec);
    AutoML.startAutoML(aml);
    AutoML.startAutoML(autoMLBuildSpec).get();
    aml.leader().getMojo().writeTo(new FileOutputStream(new File("/home/aaa/model_data/1.zip")));
}

当代码遇到AutoML.startAutoML(autoMLBuildSpec).get();时,我总是遇到异常。以下是此异常的堆栈跟踪:

08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR: java.lang.ArrayIndexOutOfBoundsException: -1
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at hex.ModelBuilder.algoName(ModelBuilder.java:106)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at ai.h2o.automl.AutoML.trainModel(AutoML.java:519)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at ai.h2o.automl.AutoML.defaultDeepLearning(AutoML.java:808)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at ai.h2o.automl.AutoML.learn(AutoML.java:1058)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at ai.h2o.automl.AutoML.run(AutoML.java:369)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at ai.h2o.automl.H2OJob$1.compute2(H2OJob.java:32)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at water.H2O$H2OCountedCompleter.compute(H2O.java:1267)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
08-31 02:38:53.583 127.0.0.1:54321       9246   FJ-1-15   ERRR:     at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
java h2o automl
1个回答
0
投票

你能分享一下细节你是如何开始H2O的?这看起来像您跳过了一些启动序列步骤,因为algos未注册。

在这种情况下,H2O日志会非常有用 - 它可以告诉我们缺少什么。

© www.soinside.com 2019 - 2024. All rights reserved.