如何在Java应用程序中嵌入H2o?

时间:2018-05-16 17:57:04

标签: java machine-learning h2o sparkling-water

我正在尝试在Java应用程序中启动嵌入式H2o并训练模型。但是,我没有得到文档中正确解释的内容(http://docs.h2o.ai/h2o/latest-stable/h2o-docs/faq/java.html)。任何人都可以通过举例来帮助我吗?

谢谢,

1 个答案:

答案 0 :(得分:1)

这里要理解的关键是你是否真的想要在你的应用程序中训练一个模型,或者你只想得到一个模型。大多数人最初只想得到一个模型。

<强>记分

评分简单自然。在这里查看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的最佳文档是源代码本身,单元测试(搜索&#39; test&#39;目录)在h2o-3项目github中:

(更难)选项4 。有些人直接从REST API调用了H2O。

我不推荐这个,因为它很难,但是如果你想尝试一下,学习如何使用REST API的最好方法是打开R的日志记录并查看消息的有效负载R客户端和H2O之间:

# R program.
h2o.init()
h2o.startLogging()
h2o.importFile("test.csv")
...