【发布时间】:2020-11-19 11:18:37
【问题描述】:
在 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)
这些返回的正是我想要的。它们返回应有的值。
当我尝试在函数上运行优化时,它不想工作,并给出了这个错误:
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$1.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 并不想很好地协同工作。该函数有点非线性,但它可以直接正确地评估已知点。
有没有一种在不改变架构的情况下解决这个问题的好方法?
【问题讨论】:
标签: r optimization h2o nonlinear-optimization