【问题标题】:h2o Steam Prediction Servlet not accepting character values from python scripth2o Steam 预测 Servlet 不接受来自 python 脚本的字符值
【发布时间】:2017-05-27 04:21:34
【问题描述】:

我正在使用 Steam 尝试使用 python 预处理脚本构建预测服务。当python将清理后的数据传递给

中的预测服务时
variable:value var2:value2 var3:value3

格式(如Spam Detection Example 中所见)我得到一个

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


    【解决方案1】:

    预测服务使用的是 EasyPredictModelWrapper,它只能使用底层模型使用的东西。在这里不清楚您使用什么模型,但大多数使用数字浮点值。在for循环代码sn-p中可以看到数字必须是float。

    【讨论】:

    • 我正在使用 GBM 模型并使用 Enum 分类处理,因此模型知道接受这些变量的字符串,而不是数值。
    • 嗨,马特,我修改了代码以在无法将其解析为浮点数时回退到使用字符串。代码已被推送,所以现在应该可以为您工作了。
    • 我已经提交了一个 PR (github.com/h2oai/steam/pull/375) 以将此更改添加到 strMapToRowData 函数。我使用的 GBM 模型似乎默认为 strMapToRowData 而不是 sparseToRowData 函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2017-10-17
    • 2013-07-24
    • 2012-12-08
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多