gpt4 book ai didi

java - H2O : NullPointerException error while building ensemble model using deep learning grid

转载 作者:搜寻专家 更新时间:2023-11-01 03:17:23 27 4
gpt4 key购买 nike

我正在尝试使用 R(3.3.3 版)和 h2o(3.10.5.1 版)中的深度学习构建堆叠集成模型来预测商家流失。响应变量是二进制的。目前,我正在尝试运行代码以使用网格搜索开发的前 5 个模型构建堆叠集成模型。但是,当代码运行时,我得到 java.lang.NullPointerException 错误,输出如下:

java.lang.NullPointerException
at hex.StackedEnsembleModel.checkAndInheritModelProperties(StackedEnsembleModel.java:265)
at hex.ensemble.StackedEnsemble$StackedEnsembleDriver.computeImpl(StackedEnsemble.java:115)
at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:173)
at water.H2O$H2OCountedCompleter.compute(H2O.java:1349)
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)

下面是我用来进行超参数网格搜索和构建集成模型的代码:

hyper_params <- list(
activation=c("Rectifier","Tanh","Maxout","RectifierWithDropout","TanhWithDropout","MaxoutWithDropout"),
hidden=list(c(50,50),c(30,30,30),c(32,32,32,32,32),c(64,64,64,64,64),c(100,100,100,100,100)),
input_dropout_ratio=seq(0,0.2,0.05),
l1=seq(0,1e-4,1e-6),
l2=seq(0,1e-4,1e-6),
rho = c(0.9,0.95,0.99,0.999),
epsilon=c(1e-10,1e-09,1e-08,1e-07,1e-06,1e-05,1e-04)
)

search_criteria <- list(
strategy = "RandomDiscrete",
max_runtime_secs = 3600,
max_models = 100,
seed=1234,
stopping_metric="misclassification",
stopping_tolerance=0.01,
stopping_rounds=5
)

dl_ensemble_grid <- h2o.grid(
hyper_params = hyper_params,
search_criteria = search_criteria,
algorithm="deeplearning",
grid_id = "final_grid_ensemble_dl",
x=predictors,
y=response,
training_frame = h2o.rbind(train, valid, test),
nfolds=5,
fold_assignment="Modulo",
keep_cross_validation_predictions = TRUE,
keep_cross_validation_fold_assignment = TRUE,
epochs=12,
max_runtime_secs = 3600,
stopping_metric="misclassification",
stopping_tolerance=0.01,
stopping_rounds=5,
seed = 1234,
max_w2=10
)

DLsortedGridEnsemble_logloss <- h2o.getGrid("final_grid_ensemble_dl",sort_by="logloss",decreasing=FALSE)

ensemble <- h2o.stackedEnsemble(x = predictors,
y = response,
training_frame = h2o.rbind(train,valid,test),
base_models = list(
DLsortedGridEnsemble_logloss@model_ids[[1]],
DLsortedGridEnsemble_logloss@model_ids[[2]],
DLsortedGridEnsemble_logloss@model_ids[[3]],
DLsortedGridEnsemble_logloss@model_ids[[4]],
DLsortedGridEnsemble_logloss@model_ids[[5]],
)

注意:到目前为止我已经意识到 h2o.stackedEnsemble 函数在只有一个基本模型时有效,并且一旦有两个或更多基本模型就会给出 Java 错误。

如果我能得到一些关于如何解决这个问题的反馈,我将不胜感激。

最佳答案

错误是指 StackedEnsembleModel.java code 的一行检查基本模型中的 training_frameh2o.stackedEnsemble() 中的 training_frame 是否具有相同的校验和。我认为问题是因为您动态创建了训练框架,而不是显式定义它(即使 应该 工作,因为它最终是相同的数据)。因此,与其在网格和集成函数中设置 training_frame = h2o.rbind(train, valid, test),不如在代码顶部设置以下内容:

df <- h2o.rbind(train, valid, test)

然后在网格和集成函数中设置training_frame = df

附带说明一下,如果您使用验证框架(用于提前停止)而不是将所有数据用于训练框架,您可能会获得更好的 DL 模型。此外,如果您想使用网格中的所有模型(可能会带来更好的性能,但并非总是如此),您可以在 h2o.stackedEnsemble() 中设置 base_models = DLsortedGridEnsemble_logloss@model_ids 功能。

关于java - H2O : NullPointerException error while building ensemble model using deep learning grid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44751866/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com