8

我想将使用该forecast库在 R 中开发的 ARIMA 模型转换为 Java 代码。请注意,我只需要实现预测部分。拟合可以在 R 本身中完成。我将查看该predict函数并将其转换为 Java 代码。我只是想知道是否有其他人以前遇到过类似的情况并成功地使用 Java 库。

沿着类似的思路,也许这是一个没有具体答案的更笼统的问题;处理模型构建可以在 Matlab/R 中完成但预测/预测需要在 Java/C++ 中完成的情况的最佳方法是什么?我越来越多地一次又一次地遇到这样的情况。我想您必须硬着头皮自己编写代码,这通常不像自己编写拟合/估计那么难。有关该主题的任何建议都会有所帮助。

4

4 回答 4

11

您将“R 或 Matlab”写到“C++ 或 Java”。这给出了 2 x 2 的选择,这对我的口味来说是太多的自由度。因此,请允许我专注于 C++ 作为目标。

让我们考虑一个更简单的情况:在R中进行原型设计,并在 C++ 中进行部署。如果您使用的R包实际上是用 C 或 C++ 实现的,这将变得非常容易。您“仅仅”需要将您所追求的例程与其其他依赖项(头文件、定义、数据结构......)分开,并为其提供所需的数据和参数。我过去曾为生产系统这样做过。

在这里,您谈论预测包。这恰好取决于RcppArmadillo包,它本身将漂亮的Armadillo C++ 库带到R。因此,您实际上可以将其重写为一个独立的单元。

当您想将 Matlab 移植到 C++ 时,犰狳也很有趣,因为它是为了帮助您完成该任务而编写的。我已经将一些相对广泛的 Matlab 代码移植到 C++ 并获得了可观的速度提升。

于 2012-04-10T13:44:11.030 回答
1

我不确定这在 R 中是否可行,但在 Matlab 中,您可以与 Java 中的 Matlab 代码进行交互 - 请参阅http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html。这将使您能够将所有预测代码留在 Matlab 中,并拥有例如用 Java 编写的接口。

或者,您可能希望使用 Java 编写预测代码,以便您可以生成模型,然后分发使用该模型的程序,而不依赖于 Matlab。Matlab编译器可能在这里有用,但我从未使用过它。

在 Matlab 和 Java 之间进行混乱交互的最后一种简单方法是(在 linux 上)使用终端,您将有一个 pty/tty 对来连接 Java 和 Matlab。在这种情况下,您可以将数据从 Java 发送到 Matlab,并让 Matlab 返回预测结果。我希望这也适用于 R,但我不知道语法。

但总的来说,重新实现代码是一个不错的解决方案,并且可能比学习如何连接 java+matlab 或创建 Matlab 库更快。

于 2012-04-10T13:35:58.220 回答
1

关于 Richante 给出的答案的一些进一步信息:Matlab 具有一些非常好的功能,可以与 C/C++、C# 和 Java 等编译语言进行互操作。在您的特定情况下,您可能会发现工具箱 Matlab Builder JA 特别相关。它允许您将 Matlab 代码直接导出到 Java,这意味着您可以直接从 Java 调用在 Matlab 中构建模型阶段构建的代码。

更多来自 Mathworks 的信息

于 2012-04-10T16:45:23.890 回答
1

我还关心将“R 转换为 Java”,所以会谈到那部分。正如 Vincent Zooneykind 在他的评论中所说 - R 中的 PMML 库通常对模型导出有意义,但“预测”目前还不是受支持的库。

另一种方法是使用https://www.opencpu.org/之类的东西从您的 java 程序中调用 R。它在 http 服务器上显示 R 代码。然后可以像普通的 http 调用一样使用参数调用它,并使用 java.net.HttpUrlConnection 或 Java 中可用的 http 库的选择返回所需的内容。优点:关注点分离,无需重新编写 R 代码缺点:在您的实时流程中调用 R 服务器,因此需要确保其得到稳健处理

于 2016-08-15T13:11:15.493 回答