h2o Steam Prediction Servlet не принимает значения символов из скрипта python

Я использую Steam, чтобы попытаться создать службу прогнозирования с использованием сценария предварительной обработки Python. Когда python передает очищенные данные службе прогнозирования в

variable:value var2:value2 var3:value3

формате (как видно из обнаружения спама Пример) я получаю

ERROR PredictPythonServlet - Failed to parse

ошибка в сервисе. Когда я смотрю на PredictPythonServlet.java кажется, что он использует только функцию strMapToRowData, которая предполагает, что каждое значение во входной строке является числом:

for (String p : pairs) {
    String[] a = p.split(":");
    String term = a[0];
    double value = Float.parseFloat(a[1]);
    row.put(term, value);
  }

Символьные значения нельзя отправлять в этом формате? Если да, то есть ли способ заставить файл PredictPythonServlet использовать функцию csvToRowData, которая определена, но никогда не использовалась? Я бы не хотел использовать кодировку One-Hot для своих моделей, поэтому было бы идеально иметь возможность передавать фактическое представление строки символов.

Кроме того, я передал числовое представление, найденное в файле pojo модели, для категориальных переменных и получил ошибку:

hex.genmodel.easy.exception.PredictUnknownTypeException: Unexpected object type java.lang.Double for categorical column home_team

Итак, похоже, что служба ожидает строку символов, но я не могу понять, как передать ее реальной модели. Любая помощь будет принята с благодарностью!


h2o
person Matt Mills    schedule 26.05.2017    source источник


Ответы (1)


Служба прогнозирования использует EasyPredictModelWrapper и может использовать только то, что использует базовая модель. Здесь не ясно, какую модель вы используете, но большинство использует числовые значения с плавающей запятой. Во фрагменте кода цикла for видно, что число должно быть с плавающей запятой.

person Magnus    schedule 26.05.2017
comment
Я использую модель GBM и использую категориальную обработку Enum, поэтому модель знает, что для этих переменных следует принимать строки, а не числовые значения. - person Matt Mills; 30.05.2017
comment
Привет, Мэтт, я изменил код, чтобы вернуться к использованию строки, если он не может проанализировать ее как число с плавающей запятой. Код был отправлен, поэтому теперь он должен работать для вас. - person Magnus; 06.06.2017
comment
Я отправил PR (github.com/h2oai/steam/pull/375 ), чтобы добавить это изменение и в функцию strMapToRowData. Модель GBM, которую я использую, кажется, по умолчанию использует функцию strMapToRowData, а не функцию sparseToRowData. - person Matt Mills; 09.06.2017