我正在尝试在 Java 应用程序中启动嵌入式 H2o 并训练模型。但是我没有得到文档中的确切解释(http://docs.h2o.ai/h2o/latest-stable/h2o-docs/faq/java.html)。任何人都可以通过提供一个例子来帮助我吗?
谢谢,
我正在尝试在 Java 应用程序中启动嵌入式 H2o 并训练模型。但是我没有得到文档中的确切解释(http://docs.h2o.ai/h2o/latest-stable/h2o-docs/faq/java.html)。任何人都可以通过提供一个例子来帮助我吗?
谢谢,
这里要理解的关键是您是真的想在应用程序中训练模型,还是只想为模型评分。大多数人最初只想为模型评分。
评分
评分简单而自然。在此处查看 MOJO 和 POJO javadoc api:
按照 javadoc 中显示的模式使用 Easy API。相关代码片段如下:
EasyPredictModelWrapper model = new EasyPredictModelWrapper(MojoModel.load("GBM_model.zip"));
RowData row = new RowData();
row.put("AGE", "68");
...
BinomialModelPrediction p = model.predictBinomial(row);
延期训练的计分和储蓄
许多人会做的是在他们的实时应用程序中得分,并保存新数据(某处)以进行延迟训练。然后离线训练模型并再次将它们投入生产以进行评分。这是一个非常典型的模型生命周期,易于理解和管理。
训练
将 H2O 嵌入到您的应用程序中以进行实际培训涉及更多。
如果我要嵌入 H2O,我会选择以下两种方式之一:
支持良好的选项 1。将 H2O 实例作为单独的进程(或分布式情况下的一组进程)启动,并使用 R 或 Python 与其通信。
有据可查的 H2O API 是 R API 和 Python API。(还有一个带有大量生成文档的 REST API,但我认为它不是特别容易使用。)
您将在以下位置找到大量文档和示例:
支持良好的选项 2。编写 Spark 应用程序并使用 Sparkling Water 和 Scala 或 PySparkling 和 Python。
这实际上并不需要太多 Spark,因为 Sparkling Water 中的嵌入式 H2O 实际上根本不依赖 Spark 端。用于苏打水的 Scala 和 Python API 有据可查。苏打水用户指南是一个很好的起点:
...然后还有其他更难的选择:
(更难)选项 3。您可以将 H2O 作为 maven 依赖项包含在内,并直接从 Java 调用它。
这里最大的问题是 Java API 没有很好的文档记录,而且你找不到关于如何使用它的友好示例。Java API 的最佳文档是源代码本身,以及 h2o-3 项目 github 中的单元测试(搜索“测试”目录):
(更难)选项 4。有些人直接从 REST API 调用 H2O。
我不建议这样做,因为它很难,但如果你想尝试,学习如何使用 REST API 的最佳方法是打开 R 的日志记录并查看 R 客户端和 H2O 之间的消息有效负载:
# R program.
h2o.init()
h2o.startLogging()
h2o.importFile("test.csv")
...