一部のモデルのトレーニングに H2O 3.20.0.5 を使用しています。
Java コードで AutoML を使用してモデルを構築したい。これで、csv ファイルをインポートして解析できるようになりました。しかし、 を呼び出そうとするとAutoML.startAutoML().get()
、常に aj が発生しava.lang.ArrayIndexOutOfBoundsException in ModelBuilder.java
ました。
にALGOBASESが定義されていないようですModelBuilder
。しかし、アルゴリズムを自動的に作成することになっている 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)