Ошибка с использованием пакета optim при прогнозировании с помощью модели H2O R

В 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)

Они возвращают именно то, что я ищу. Они возвращают те значения, которые должны.

Когда я пытаюсь запустить optim для функции, она не хочет работать и выдает следующую ошибку:

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 и h2o.ai на основе Java не хотят работать вместе. Функция немного нелинейна, но она оценивает известные точки напрямую и правильно.

Есть ли достойный способ обойти это, не меняя архитектуры?


person EngrStudent    schedule 29.07.2020    source источник


Ответы (1)


Я не думаю, что эта ошибка имеет какое-либо отношение к использованию пакета optim. Это ошибка пакета H2O, который просто "Test/Validation dataset has no columns in common with the training set".

Поэтому вам следует проверить имена столбцов вашего тестового набора (или любого другого набора данных, который вы передаете функции h2o.predict()), чтобы убедиться, что он похож на ваш обучающий набор (все обучающие столбцы должны присутствовать в тестовом наборе). Если вы можете опубликовать воспроизводимый пример, я, вероятно, смогу быть более полезным.

person Erin LeDell    schedule 30.07.2020
comment
Сделал это. Идентичный. Я в этом убедился. Это не проблема. Я убедился, что соответствует кадру данных, а затем перенесен в H2O. Когда я запускаю прогноз вне цикла optim, он работает отлично. Это дает результаты без проблем. Ошибка возникает только тогда, когда он оборачивается в optim. В настоящее время я думаю, что R не хочет здесь хорошо приклеивать C к Java. - person EngrStudent; 30.07.2020
comment
Вы были правы и неправы. Функция optim лишила его информации фрейма данных. Я расширил функцию, чтобы поместить числовые данные в форму df, а затем передать их h2o.ai, и это сработало. Спасибо. - person EngrStudent; 30.07.2020