У меня есть модель, построенная в H2O (скажем, модель GLM). Теперь я хочу импортировать эту модель в Python для использования в других приложениях.
Как мне это сделать ?
У меня есть модель, построенная в H2O (скажем, модель GLM). Теперь я хочу импортировать эту модель в Python для использования в других приложениях.
Как мне это сделать ?
Попробуй это:
# build the model
model = H2ODeepLearningEstimator(params)
model.train(params)
# save the model
model_path = h2o.save_model(model=model, path="/tmp/mymodel", force=True)
print(model_path)
/tmp/mymodel/DeepLearning_model_python_1441838096933
# load the model
saved_model = h2o.load_model(model_path)
Вам нужно экспортировать модель как MOJO или POJO (предпочитайте MOJO, если ваш алгоритм его поддерживает). Это объект Java, поэтому вам нужно использовать Java для его запуска. Есть много вариантов, как это сделать:
http://docs.h2o.ai/h2o/latest-stable/h2o-docs/productionizing.html
(Кстати, R API недавно добавил h2o.predict_json(), который выполняет преобразование аргументов в JSON и вызов Java за вас; похоже, в Python API пока ничего нет, но если вы прочтете код R, который вы увидите он не делает ничего сложного: просто запускает команду оболочки.)
Другой альтернативой является запуск сервера H2O и использование его из Python. В этом случае вы просто хотите сохранить свою модель (в двоичном формате), а затем загружать ее (обратно в кластер H2O) каждый раз, когда вы хотите делать прогнозы: http://docs.h2o.ai/h2o/latest-stable/h2o-docs/save-and-load-model.html
Недостатком этого подхода является то, что двоичный формат всегда привязан к версии H2O. Поэтому, если вы обновите H2O, вы больше не сможете использовать свои сохраненные модели.
Более новые версии H2O имеют возможность импортировать MOJO через API Python:
# re-import saved MOJO
imported_model = h2o.import_mojo(path)
new_observations = h2o.import_file(path='new_observations.csv')
predictions = imported_model.predict(new_observations)
Внимание: MOJO нельзя повторно импортировать в python в более старых версиях H2O, в которых отсутствует функция h2o.import_mojo()
.
Таким образом, h2o.save_model()
, похоже, потерял свою роль — мы можем использовать только my_model.save_mojo()
(обратите внимание, что это не метод h2o
, а свойство объекта модели), поскольку эти файлы можно использовать не только для развертывания приложений Java, но и в python. (на самом деле они все еще используют для этого внутренний мост python-Java).