【问题标题】:H2O Data prep export to POJOH2O 数据准备导出到 POJO
【发布时间】:2018-01-30 15:59:27
【问题描述】:

我是 H2O 项目的新手,但对将它用于我的 Web 应用程序很感兴趣。我制作了一些教程,在 R 中使用 h2o 库构建模型,然后将其导出为 POJO 模型。

我的问题是我需要预测的数据与我用于训练数据集的格式不同。我想知道是否可以将我的 R 代码用于数据转换并将其导出为POJO(或类似),以便我可以准备新数据以进行实时预测。

我在 H2O 文档页面 (link) 的“生产 H2O”部分找到了一些示例,例如 Consumer loan applicationStorm bolt。但在第一种情况下,他们使用相同的一组功能,而在第二种情况下,数据准备是使用 .java 代码完成的(对此不确定,我在 R 之外的编程技能很差)。所以我无法弄清楚如何在新数据集上使用 R 中的转换代码。

有什么建议吗?

【问题讨论】:

    标签: r h2o


    【解决方案1】:

    您有四个选择: (编辑:添加第三个选项) (EDIT 2:为 MOJO 添加了第四个选项——推荐)

    1. 您可以将预测管道保留在 R 中并使用 h2o.predict_json() 函数,该函数允许您将测试数据作为 R 中的 JSON 传递到磁盘上的 MOJO/POJO 以生成预测。这将允许您使用您的 R 代码进行数据修改,然后您将获取修改后的数据,将其转换为 JSON 字符串,并使用 h2o.predict_json() 生成预测。该函数一次需要一行,因此如果您有整个数据框,则必须编写一个循环。那时预测将在 R 内存中,因此您可以选择将它们写入文件/数据库或在纯 R 中对它们执行其他操作。
    2. 直接使用 Java 应用程序中的 POJO/MOJO 将 R 数据处理代码翻译成 Java 并让您的应用程序只保留 Java。
    3. 继续使用 R 代码进行修改,使用快速 I/O 工具(如 data.table::fwrite())将修改后的数据写入磁盘,然后使用该新文件作为 POJO/MOJO 的输入并在 Java 中评分。通过这种方式,您可以一次对整个文件进行评分,而不是在 #1 中您必须一次对一行进行评分。
    4. 我们现在有两个方便的函数,h2o.mojo_predict_df()h2o.mojo_predict_csv(),它们允许您使用高效的 MOJO 模型从 R 中对数据集进行评分。你可以在这里做的是在R中编写一些数据转换代码,然后将转换后的data.frame传递给h2o.mojo_predict_df()(假设你已经使用h2o.download_mojo()函数将模型导出为MOJO格式)。这允许您将评分管道完全保留在 R 中,但您将获得使用优化 MOJO 模型的速度。

    【讨论】:

    • 感谢您的回答,艾琳!第一个选项正是我在没有 h2o 的情况下使用 skparklyr 包中的模型所做的。但我认为 R 实时编排整个过程的效率并不高。这是我尝试 h2o 的主要动机。实际上,我在 h2o 网页 (link) 上看到了该方案,指出数据准备导出到 POJO 的方式与模型相同。所以我对此感到有点失望。
    • 您不必一直使用 R,只是为了数据处理,即使您从 R 调用预测代码,它也在 Java 中评分(因此它更快)。你知道 rsparkling(H2O via sparklyr)会有所帮助吗?这样你就可以在 Spark(而不是 R)中做 munging,但你仍然可以用来编排。 spark.rstudio.com/guides/h2ogithub.com/h2oai/rsparkling
    • @AndriyT。我添加了第三个选项。
    • 基于您的 3 个选项,我将尝试比较: 1. 将新数据集加载到 R,转换并写入磁盘,使用存储为 POJO 的模型在 Java 中对其进行评分。 2. 将新数据集和 h2o 模型加载到 R,在同一会话中进行转换和预测,将结果写入磁盘。
    • @EmmaNej 我刚刚添加了您可能感兴趣的第四个选项。
    【解决方案2】:

    在 H2O 做出预测之前处理数据变化是您需要处理的事情。

    一种策略是编写您的 munging 代码,以便您可以在训练和生产环境中执行完全相同的代码。

    【讨论】:

    • 我明白,所以我正在寻求帮助以找到最好的方法。
    猜你喜欢
    • 2017-12-19
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2018-05-12
    • 2019-05-09
    相关资源
    最近更新 更多