2012-04-10 21 views
8

Me gustaría convertir un modelo ARIMA desarrollado en R utilizando la biblioteca forecast al código de Java. Tenga en cuenta que necesito implementar solo la parte de previsión. La adaptación se puede hacer en R sí mismo. Voy a ver la función predict y traducirla al código de Java. Me preguntaba si alguien más había estado en una situación similar antes y logré utilizar con éxito una biblioteca Java para el mismo.Conversión de modelos en Matlab/R a C++/Java

En líneas similares, y tal vez esta es una pregunta más general sin una respuesta concreta; ¿Cuál es la mejor manera de tratar situaciones en las que la construcción de modelos se puede hacer en Matlab/R, pero la predicción/previsión debe hacerse en Java/C++? Cada vez más, he estado encontrando tal situación una y otra vez. Supongo que tiene que morder la bala y escribir el código usted mismo y esto no es tan difícil como escribir la adaptación/estimación usted mismo. Cualquier consejo sobre el tema sería útil.

+0

[PMML] (http: //en.wikipedia .org/wiki/Predictive_Model_Markup_Language) se supone que (¿era?) para responder a esa necesidad: generar modelos estadísticos con un software, e implementarlos en otro. R puede exportar algunos modelos PMML, pero los modelos de series de tiempo aparentemente faltan (pueden ser fáciles de agregar). Y debería encontrar alguna biblioteca Java/C++ para usar modelos PMML. –

Respuesta

11

Usted escribe sobre 'R o Matlab' a 'C++ o Java'. Esto da 2 x 2 elecciones que son demasiados grados de libertad para mi gusto. Así que permítanme concentrarme en C++ como el objetivo.

Consideremos un caso más simple: Creación de prototipos en R y despliegue en C++. Si y cuando el paquete R que utiliza se implementa realmente en C o C++, esto se vuelve bastante fácil. Usted "simplemente" necesita desenredar la rutina que está buscando de sus otras dependencias (archivos de encabezado, define, estructuras de datos, ...) y proporcionarle los datos y los parámetros necesarios. Lo hice en el pasado para los sistemas de producción.

Aquí, hablas sobre el paquete forecast. Esto pasa a depender del paquete RcppArmadillo que a su vez trae la buena biblioteca Armadillo C++ al R. Entonces, lo más probable es que puedas volver a escribir esto como una unidad autónoma.

Armadillo también es interesante cuando se desea portar Matlab a C++, ya que está escrito para ayudar con exactamente esa tarea en mente. He portado un código relativamente extenso de Matlab a C++ y obtuve una ganancia sustancial de velocidad.

1

No estoy seguro de si esto es posible en R, pero en Matlab puedes interactuar con tu código de Matlab desde Java - ver http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html. Esto le permitiría dejar todo el código de previsión en Matlab y tener, por ejemplo, una interfaz escrita en Java.

O bien, es posible que desee tener un código predictivo escrito en Java para que pueda producir un modelo y luego distribuir un programa que utiliza el modelo sin tener una dependencia en Matlab. El Matlab compiler puede ser útil aquí, pero nunca lo he usado.

Una última manera simple de interactuar desordenadamente entre Matlab y Java sería (en Linux) usando pseudoterminals donde tendría un par pty/tty para interactuar con Java y Matlab. En este caso, enviaría datos de Java a Matlab y haría que Matlab devuelva los resultados del pronóstico. Espero que esto también funcione en R, pero no sé la sintaxis.

En general, volver a implementar el código es una solución decente y probablemente más rápido que aprender a interactuar con java + matlab o crear bibliotecas de Matlab.

1

Alguna información adicional sobre la respuesta dada por Richante: Matlab tiene algunas realmente buenas capacidades para la interoperabilidad con lenguajes compilados como C/C++, C# y Java. En su caso particular, puede encontrar que la caja de herramientas Matlab Builder JA es particularmente relevante. Le permite exportar su código de Matlab directamente a Java, lo que significa que puede llamar directamente al código que ha construido durante la fase de creación de modelos en Matlab desde Java.

Más información de Mathworks here.

1

También me preocupa la conversión de "R a Java", por lo que le hablaré a esa parte. Como dijo Vincent Zooneykind en su comentario, la biblioteca PMML en R tiene sentido para la exportación de modelos en general, pero "pronóstico" no es una biblioteca compatible hasta el momento.

Una alternativa es usar algo como https://www.opencpu.org/ para hacer una llamada a R desde su programa java. Muestra el código R en un servidor http. Luego puede llamarlo con parámetros como con una llamada http normal y devolver lo que es necesario usando java.net.HttpUrlConnection o una selección de bibliotecas http disponibles en Java. Pros: Separación de problemas, no es necesario volver a escribir el código R Contras: Invocar un servidor R en su proceso en vivo, así que debe asegurarse de que se maneje con solidez