首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于H2O框架的Java /MOJO和EasyPredictModelWrapper预测

基于H2O框架的Java /MOJO和EasyPredictModelWrapper预测
EN

Stack Overflow用户
提问于 2018-05-21 11:27:19
回答 1查看 986关注 0票数 1

我在R中训练了一个线性模型,并导出了一个POJO,并将其嵌入到了一个(Java) SpringBoot webapp应用程序中。教程很好地描述了使用EasyPredictModelWrapper包装POJO和实例化对象:

代码语言:javascript
运行
复制
hex.genmodel.GenModel rawModel = (hex.genmodel.GenModel) Class.forName(modelClassName).newInstance();
model = new EasyPredictModelWrapper(rawModel);

我可以组装一个RowData对象:

代码语言:javascript
运行
复制
RowData row = new RowData();
row.put("feature1", this.feature1);

并获得该行的预测:

代码语言:javascript
运行
复制
BinomialModelPrediction p = model.predictBinomial(row);

我还导出了与MOJO相同的模型--部署过程几乎相同。

我的用例是,我收到一个需要评分的可变长度对象列表,所以我迭代列表并为每个对象构造一行,将其传递给包装器并接收预测。到目前一切尚好。

现在,我想使用一个更复杂的模型,它同时考虑所有行。在R中,这是一种将数据case传递给模型的情况,而不是一行(并接收数据返回)。

我的问题是:如何将数据文件传递给生成的模型对象?我已经检查了h2o-3回购中的源代码,读取了h2o标记中每个SO帖子的标题,并在JIRA董事会中滚动,直到得到RSI为止,我找到的最接近的东西是一个名为MojoFrame的DriverlessAI类,不过给出的示例是一个转换而不是一个预测。

我确信EasyPredictModelWrapper不支持多行输入--源完全是关于RowData类的。如果是这样的话,那就太好了,但这不一定是一场表演。

对于底层模型实现,我不太确定:MojoFrameFrameBuilder类倾向于暗示在DriverlessAI中支持它,这可能使用或不使用相同的MOJO。此外,H2OFrame类不时出现在Spark/R/Python的评分上下文中,因此尽管这是针对本地模型而不是生成的Java对象,但它给了我希望模型格式能够支持它,可能的途径可能是扩展支持类。

我已经考虑过但尚未测试的选项:

  • 修改EasyPredictModelWrapper以接受框架(为理解MOJO格式所做的大量努力)
  • 将输入列表重命名为一行(打破用于训练模型的基于框架的范例,这可能会破坏整个过程)

有没有人用生成的POJO或MOJO工件进行基于多行/帧的输入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-21 14:12:18

H2O-3 MOJO/MOJO是基于行的。EasyPredictModelWrapper是一个用于进行基于行的预测的方便包装器。

如果您想做一个以上的预测,那么使用for-循环是一个很好的答案。

即使将来API扩展到接受某种框架,它也不会做任何与for循环不同的事情。

(请注意,这不应与无人驾驶的AI MOJOs混淆,后者不可互换,而且确实有一些不同的属性。)

对于底层模型实现,我不太确定: MojoFrame和FrameBuilder类倾向于暗示在DriverlessAI中支持它,这可能使用或不使用相同的MOJO。

尽管有一个共同的名字MOJO,H2O-3 MOJOs和无人驾驶的AI MOJOs是不同的实现,不能互换。

他们的共同特点是:

  • 生成的工件不需要编译(与H2O-3 POJO不同,后者是Java代码)
  • 支持java运行时。
  • 低延迟,非常适合实时应用程序。
  • 一次在一行上高效工作,非常适合于流应用程序。

无人驾驶的AI MOJOs包括特征工程转换以及预测模型。

我的问题是:如何将数据文件传递给生成的模型对象?我已经检查了h2o-3回购的源头。

您不能使用当前的H2O-3 MOJO API。H2O-3 MOJO API是基于行的API。当然,我们可以扩展API来执行某种循环方法。

现在,我想使用一个更复杂的模型,它同时考虑所有行。

我不知道“同时考虑所有行”是什么意思。这不是H2O-3 MOJO或EasyPredictModelWrapper所做的。基本的数学是逐行的。即使你在数学上放了一个方便的函数来获得一个值的框架,它仍然会逐行地计算结果,每个行以一种理论上令人尴尬的并行方式单独计算,使用简单的for循环,或者其他一些花哨的方法,如果你需要速度的并行性。

在H2O-3 MOJO API中,为N行计算的结果对为行N1或N+1计算的结果没有影响(或者,更普遍地说,对于N以外的任何行的结果)。

(请注意,对于无人驾驶的AI MOJOs,由于功能工程是合并的,可能上面的逐行讨论可能是不同的。一个很好的例子是时间序列加窗计算。这种讨论超出了这一问题和答案的范围,但在这方面值得指出)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50447863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档