Обучение составных ансамблевых моделей H2O с использованием экспортированных моделей Mojo и двоичных моделей

Я пытаюсь построить составные ансамблевые модели с использованием API-интерфейсов H2O Java.

Для этого я обучил 2 модели

  1. Модель GBM
  2. Модель DRF

Я экспортировал эти модели как в формате Mojo, так и в двоичном формате. Для экспорта моделей я использовал следующий фрагмент кода:

Для экспорта в формат Mojo:

        water.api.ModelsHandler modelsHandler = new ModelsHandler();
        water.api.StreamingSchema streamingSchema = modelsHandler.fetchMojo(3, modelsV3); //water.api.schemas3.ModelsV3

Для экспорта в двоичном формате:

        water.api.ModelsHandler modelsHandler = new ModelsHandler();
        modelsHandler.exportModel(3, modelExport); //water.api.schemas3.ModelExportV3

Я также экспортировал данные удержания перекрестной проверки, поскольку они потребуются позже для обучения составных моделей ансамбля.

Предположим, что имена моих экспортированных моделей и имена их удерживаемых данных выглядят следующим образом:

Имя модели: StackGBMReg1 Имя CVData: cv_holdout_prediction_StackGBMReg1

Имя модели: StackDRFReg1 Имя CVData: cv_holdout_prediction_StackDRFReg1

Обучение составным ансамблевым моделям

Затем я импортирую эти модели и их данные CV позже на сервер H2O для обучения составных моделей Ensemble. Вот фрагмент кода для этой операции:

Чтобы импортировать данные удержания:

    ImportFilesV3 importFile = h2o.importFiles(workingDir + fileName); //fileName: cv_holdout_prediction_StackGBMReg1 or DRFReg1 one.

Чтобы импортировать модель:

    ModelsHandler modelsHandler = new ModelsHandler();
    water.api.schemas3.ModelsV3 importedModel = modelsHandler.importModel(3, modelImport); //water.api.schemas3.ModelImportV3

Я получаю следующую ошибку при попытке импортировать модели Mojo.

    H2OException: Error while importing model : StackGBMReg1.zip
        at ImportAndScore.importModel(ImportAndScore.java:306)
        at ImportAndScore.main(ImportAndScore.java:61)
    Caused by: java.lang.IllegalArgumentException: Missing magic number 0x1CED at stream start
        at water.AutoBuffer.<init>(AutoBuffer.java:287)
        at hex.Model.importBinaryModel(Model.java:2380)
        at water.api.ModelsHandler.importModel(ModelsHandler.java:209)
        at ImportAndScore.importModel(ImportAndScore.java:302)
        ... 1 more

Согласно ответу, который я получил на форуме h2o, импорт моделей Mojo не поддерживается. Я нахожу это действительно странным.

Чтобы решить эту проблему, я импортировал бинарные модели, которые оказались успешными. Затем обучил составных ансамблевых моделей, которые у меня отлично сработали.

Мои вопросы:

1. Since, mojo Model import is not working using ModelsHandler.importModel(), is there another API available or work around which can help me to import Mojo Model in H2O?
2. Can we convert, POJO or MOJO models into binary Model for import purpose?
3. As per last reply for h2o, binary models are not backward compatible. So, if I upgrade H2O later, my older trained models will not work for training new stacked ensemble models. Actually, it will fail at import step itself. 
    a. So, is there a way to use the binary models without having the backward compatibility issue?
    b. If binary models are the only way to go, then is my approach right for training stacked Ensemble models(using previously exported/saved models)?
    c. Am I likely to face any other issue with binary models in future which I dont for see now?

Моя главная забота - избавиться от проблемы обратной совместимости. Если есть какой-то способ справиться с этим, это действительно поможет моей работе. Поскольку я использую Java-код, я бы не отказался использовать любой внутренний h2o api, который напрямую не отображается.

Обратите внимание, что я не говорю о загрузке моделей MOJO для целей оценки. Я понимаю, что мы можем легко использовать модели Mojo для оценки по этой ссылке: http://docs.h2o.ai/h2o/latest-stable/h2o-docs/productionizing.html


person AdityaK01    schedule 16.08.2018    source источник


Ответы (1)


Отвечая на ваши вопросы в строке:

1. Поскольку импорт модели mojo не работает с использованием ModelsHandler.importModel (), есть ли другой API-интерфейс, который может помочь мне импортировать модель Mojo в H2O?

Нет. MOJO был разработан с целью облегчить запуск модели в производство.

2. Можем ли мы преобразовать модели POJO или MOJO в двоичную модель для импорта? Нет.

3. Согласно последнему ответу на h2o, бинарные модели не имеют обратной совместимости. Итак, если я обновлю H2O позже, мои старые обученные модели не будут работать для обучения новых составных моделей ансамбля. На самом деле, на самом шаге импорта он завершится ошибкой.

Да, вы сможете загрузить и использовать эту сохраненную двоичную модель только с той же версией H2O, которую вы использовали для обучения своей модели. Бинарные модели H2O несовместимы с версиями H2O.

а. Итак, есть ли способ использовать бинарные модели без проблем с обратной совместимостью? Нет.

б. Если двоичные модели - единственный путь, то подходит ли мой подход для обучения составных моделей Ensemble (с использованием ранее экспортированных / сохраненных моделей)? Да.

c. Могу ли я столкнуться с какой-либо другой проблемой с бинарными моделями в будущем, которую я не вижу сейчас? Основная проблема - обратная совместимость.

Обратите внимание, что H2O.ai может поддерживать чтение MOJO в H2O-3 в будущем, но в настоящее время для этого нет расписания.

person Lauren    schedule 17.08.2018
comment
Спасибо, Лорен. Это проясняет мои сомнения. - person AdityaK01; 23.08.2018