【问题标题】:Error using optim package while predicting with an H2O R model使用 H2O R 模型进行预测时使用 optim 包时出错
【发布时间】: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


    【解决方案1】:

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

    因此,您应该检查测试集的列名(或您传递给h2o.predict() 函数的任何数据集),以确保它看起来像您的训练集(所有训练列都应该存在于测试集中)。如果您可以发布一个可重现的示例,我可能会更有帮助。

    【讨论】:

    • 做到了。完全相同的。我确定了这一点。那不是问题。我确保匹配数据框,然后传输到 h2o。当我在优化循环之外运行预测时,它运行得非常好。它给出了没有问题的结果。只有当它被包裹在 optim 中时,它才会给出错误。我目前认为 R 不想在这里很好地将 C 粘合到 Java。
    • 你是对的,也是错的。 optim 函数剥离了它的数据帧信息。我增强了函数以将数字数据放入 df 表单,然后将其传递给 h2o.ai,它运行良好。谢谢。
    猜你喜欢
    • 2018-07-24
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    相关资源
    最近更新 更多