Konvertieren von Modellen in Matlab / R nach C ++ / Java

8

Ich möchte ein in R entwickeltes ARIMA-Modell mit der Bibliothek forecast in Java-Code konvertieren. Beachten Sie, dass ich nur den Prognoseteil implementieren muss. Die Anpassung kann in R selbst erfolgen. Ich werde mir die Funktion predict ansehen und sie in Java-Code übersetzen. Ich habe mich nur gefragt, ob noch jemand in einer ähnlichen Situation war und es geschafft, eine Java-Bibliothek erfolgreich zu verwenden.

In ähnlicher Weise und vielleicht ist dies eine allgemeinere Frage ohne konkrete Antwort; Wie kann man am besten mit Situationen umgehen, in denen das Modellieren in Matlab / R möglich ist, aber die Vorhersage / Prognose in Java / C ++ erfolgen muss? Ich bin immer wieder auf eine solche Situation gestoßen. Ich schätze, Sie müssen in den sauren Apfel beißen und den Code selbst schreiben, und das ist im Allgemeinen nicht so schwer wie das Verfassen der Schätzung selbst. Jeder Rat zu diesem Thema wäre hilfreich.

    
Nikhil 10.04.2012, 13:28
quelle

4 Antworten

11

Sie schreiben über 'R oder Matlab' nach 'C ++ oder Java'. Dies gibt 2 x 2 Auswahlmöglichkeiten, die für meinen Geschmack zu viele Freiheitsgrade sind. Also erlauben Sie mir, mich auf C ++ als Ziel zu konzentrieren.

Betrachten wir einen einfacheren Fall: Prototyping in R und Bereitstellung in C ++. Wenn und wenn das R -Paket, das Sie verwenden, tatsächlich in C oder C ++ implementiert ist, wird dies ziemlich einfach. Sie "müssen" lediglich die Routine, die Sie suchen, von ihren anderen Abhängigkeiten (Header-Dateien, Definitionen, Datenstrukturen, ...) entwirren und sie mit den benötigten Daten und Parametern versorgen. Das habe ich in der Vergangenheit für Produktionssysteme getan.

Hier sprechen Sie über das Vorhersage -Paket. Dies hängt von dem Paket RcppArmadillo ab, das selbst das nette Armadillo C ++ - Bibliothek zu R . Es besteht also die Möglichkeit, dass Sie dies als eigenständige Einheit umschreiben können.

Armadillo ist auch interessant, wenn Sie Matlab nach C ++ portieren wollen, da es geschrieben wurde, um genau bei dieser Aufgabe zu helfen. Ich habe einen relativ umfangreichen Matlab-Code nach C ++ portiert und einen erheblichen Geschwindigkeitszuwachs erzielt.

    
Dirk Eddelbuettel 10.04.2012, 13:44
quelle
1

Ich bin nicht sicher, ob das in R möglich ist, aber in Matlab können Sie mit Ihrem Matlab-Code aus Java interagieren - siehe Ссылка . Dies würde es Ihnen ermöglichen, den gesamten Vorhersagecode in Matlab zu belassen und z. eine Schnittstelle in Java geschrieben.

Alternativ können Sie in Java geschriebenen prädiktiven Code verwenden, um ein Modell zu erstellen und dann ein Programm zu verteilen, das das Modell verwendet, ohne von Matlab abhängig zu sein. Der Matlab Compiler könnte hier nützlich sein, aber ich habe ihn nie benutzt.

Ein letzter einfacher Weg, um zwischen Matlab und Java unordentlich zu interagieren, wäre (unter Linux) mit Pseudoterminals , wo Sie sich befinden würde ein Pty / Tty-Paar haben, um Java und Matlab zu verbinden. In diesem Fall würden Sie Daten von Java an Matlab senden und Matlab die Prognoseergebnisse zurückgeben. Ich erwarte, dass dies auch in R funktionieren würde, aber ich kenne die Syntax nicht.

Im Allgemeinen ist die Neuimplementierung des Codes eine vernünftige Lösung und wahrscheinlich schneller, als zu lernen, wie man java + matlab verbindet oder Matlab-Bibliotheken erstellt.

    
Richante 10.04.2012 13:35
quelle
1

Einige weitere Informationen zu der Antwort von Richante: Matlab hat einige wirklich nette Möglichkeiten für die Interop mit kompilierten Sprachen wie C / C ++, C # und Java. In Ihrem speziellen Fall finden Sie die Toolbox Matlab Builder JA als besonders relevant. Es ermöglicht Ihnen, Ihren Matlab-Code direkt nach Java zu exportieren, was bedeutet, dass Sie Code, den Sie während Ihrer Modellbauphase in Matlab aus Java erstellt haben, direkt aufrufen können.

Weitere Informationen von den Mathworks hier .

    
pmcs 10.04.2012 16:45
quelle
1

Ich bin auch damit beschäftigt, "R nach Java" zu konvertieren, also werde ich mit diesem Teil sprechen. Wie Vincent Zooneykind in seinem Kommentar sagte - die PMML-Bibliothek in R ist im Allgemeinen für den Modellexport sinnvoll, aber "Forecast" ist noch keine unterstützte Bibliothek.

Eine Alternative ist, etwas wie Ссылка zu verwenden, um von Ihrem Java-Programm aus R anzurufen. Es zeigt den R-Code auf einem http-Server an. Kann es dann einfach mit Parametern wie bei einem normalen http-Aufruf aufrufen und zurückgeben, was mit java.net.HttpUrlConnection oder einer Auswahl von http-Bibliotheken, die in Java verfügbar sind, benötigt wird. Vorteile: Trennung von Bedenken, keine Notwendigkeit, den R-Code neu zu schreiben Nachteile: Aufrufen eines R-Servers in Ihrem Live-Prozess, so müssen Sie sicherstellen, dass dies robust gehandhabt wird

    
John Curry 15.08.2016 13:11
quelle

Tags und Links