使用 H2O R 模型进行预测时使用 optim 包时出错

Error using optim package while predicting with an H2O R model

在R中,有一个非常方便的优化包,叫做"optim"。你可以给它一个函数,一个初始位置,有时还有其他控制输入,它会优化你的函数。

我正在尝试通过以下方式将其与 h2o.ai 模型一起使用:

make_model <- h2o.stuff(x,y,training, parameters)
f <- function(x,make_model){ h2o.predict() %>% ...}
f2 <- function(x){f(x,make_model)}

optim(start, function=f2, ...)

当我 运行 测试用例时它们起作用:

f2(start_point) 
f2(known_values)

这些 return 正是我要找的。他们 return 他们应该有的价值观。

当我尝试 运行 函数的优化时,它不想工作,并给出了这个错误:

java.lang.IllegalArgumentException: Test/Validation dataset has no columns in common with the training set

java.lang.IllegalArgumentException: Test/Validation dataset has no columns in common with the training set
    at hex.Model.adaptTestForTrain(Model.java:1383)
    at hex.Model.adaptTestForTrain(Model.java:1222)
    at hex.Model.score(Model.java:1509)
    at water.api.ModelMetricsHandler.compute2(ModelMetricsHandler.java:396)
    at water.H2O$H2OCountedCompleter.compute(H2O.java:1557)
    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.IllegalArgumentException: Test/Validation dataset has no columns in common with the training set
Called from: doTryCatch(return(expr), name, parentenv, handler)

现在在我看来,基于 C 的 optim 和基于 Java 的 h2o.ai 不想一起玩。函数有点非线性,但是对已知点的求值直接正确

有没有一种不改变架构就能解决这个问题的好方法?

我认为这个错误与使用 optim 包没有任何关系。这是来自 H2O 包的错误,只是 "Test/Validation dataset has no columns in common with the training set".

所以你应该检查你的测试集的列名(或者你传递给 h2o.predict() 函数的任何数据集)以确保它看起来像你的训练集(所有训练列应该出现在测试集)。如果你能 post 一个可重现的例子,我可能会更有帮助。