2012-04-10 38 views
8

Tôi muốn chuyển đổi mô hình ARIMA được phát triển bằng R bằng cách sử dụng thư viện forecast sang mã Java. Lưu ý rằng tôi chỉ cần triển khai phần dự báo. Việc lắp có thể được thực hiện trong R chính nó. Tôi sẽ xem xét hàm predict và dịch nó sang mã Java. Tôi chỉ tự hỏi liệu có ai khác đã từng ở trong một tình huống tương tự trước đây và quản lý thành công việc sử dụng một thư viện Java cho cùng một không.Chuyển đổi mô hình trong Matlab/R thành C++/Java

Cùng các dòng tương tự và có lẽ đây là câu hỏi chung chung hơn mà không có câu trả lời cụ thể; Cách tốt nhất để đối phó với các tình huống mà trong xây dựng mô hình có thể được thực hiện trong Matlab/R nhưng dự đoán/dự báo cần phải được thực hiện trong Java/C++ là gì? Càng ngày, tôi đã gặp phải một tình huống như thế lặp đi lặp lại. Tôi đoán bạn phải cắn viên đạn và viết mã cho chính mình và điều này thường không khó bằng cách viết chính việc lắp/ước lượng bản thân bạn. Bất kỳ lời khuyên nào về chủ đề sẽ hữu ích.

+0

[PMML] (http: //en.wikipedia .org/wiki/Predictive_Model_Markup_Language) là (được?) phải trả lời nhu cầu đó: tạo các mô hình thống kê với một phần mềm, và triển khai chúng ở một phần mềm khác. R có thể xuất một số mô hình PMML, nhưng các mô hình chuỗi thời gian dường như bị thiếu (chúng có thể dễ dàng thêm). Và bạn sẽ phải tìm một số thư viện Java/C++ để sử dụng các mô hình PMML. –

Trả lời

11

Bạn viết về 'R hoặc Matlab' thành 'C++ hoặc Java'. Điều này mang lại cho 2 x 2 lựa chọn, đó là quá nhiều bậc tự do cho khẩu vị của tôi. Vì vậy, cho phép tôi tập trung vào C++ làm mục tiêu.

Hãy xem xét một trường hợp đơn giản: Tạo mẫu trong R và triển khai trong C++. Nếu và khi gói R bạn sử dụng thực sự được triển khai trong C hoặc C++, điều này trở nên khá dễ dàng. Bạn "đơn thuần" cần phải gỡ rối thói quen bạn đang làm sau các phụ thuộc khác (các tệp tiêu đề, định nghĩa, cấu trúc dữ liệu, ...) và cung cấp dữ liệu và tham số cần thiết. Tôi đã làm điều đó trong quá khứ cho các hệ thống sản xuất.

Ở đây, bạn nói về gói forecast. Điều này xảy ra phụ thuộc vào gói RcppArmadillo mà chính nó mang đến thư viện Armadillo C++ tốt đẹp đến R. Vì vậy, rất có thể là bạn có thể trong thực tế viết lại này như là một đơn vị khép kín.

Armadillo cũng rất thú vị khi bạn muốn chuyển Matlab thành C++ vì nó được viết để trợ giúp chính xác nhiệm vụ đó trong đầu. Tôi đã chuyển một số mã Matlab tương đối rộng sang C++ và thu được một tốc độ đáng kể.

1

Tôi không chắc liệu điều này có khả thi trong R hay không, nhưng trong Matlab bạn có thể tương tác với mã Matlab của bạn từ Java - xem http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html. Điều này sẽ cho phép bạn để lại tất cả các mã dự báo trong Matlab và có ví dụ một giao diện được viết bằng Java. Ngoài ra, bạn có thể muốn có mã dự báo được viết bằng Java để bạn có thể tạo ra một mô hình và sau đó phân phối một chương trình sử dụng mô hình mà không có sự phụ thuộc vào Matlab. Các Matlab compiler có thể hữu ích ở đây, nhưng tôi chưa bao giờ sử dụng nó.

Cách đơn giản cuối cùng để tương tác lộn xộn giữa Matlab và Java sẽ là (trên Linux) sử dụng pseudoterminals nơi bạn sẽ có cặp pty/tty để giao tiếp Java và Matlab. Trong trường hợp này, bạn sẽ gửi dữ liệu từ Java đến Matlab, và có Matlab trả về kết quả dự báo. Tôi hy vọng điều này cũng sẽ làm việc trong R, nhưng tôi không biết cú pháp.

Nói chung, việc triển khai lại mã là một giải pháp tốt và có thể nhanh hơn việc học cách giao tiếp java + matlab hoặc tạo thư viện Matlab.

1

Một số thông tin thêm về câu trả lời được đưa ra bởi Richante: Matlab có một số thực sự khả năng tốt đẹp cho interop với các ngôn ngữ biên soạn như C/C++, C# và Java. Trong trường hợp cụ thể của bạn, bạn có thể tìm thấy hộp công cụ Matlab Builder JA có liên quan đặc biệt. Nó cho phép bạn xuất mã Matlab của bạn trực tiếp sang Java, nghĩa là bạn có thể gọi trực tiếp mã mà bạn đã xây dựng trong giai đoạn xây dựng mô hình của bạn trong Matlab từ Java.

Thông tin khác từ Mathworks here.

1

Tôi cũng quan tâm đến việc chuyển đổi "R thành Java" để nói chuyện với phần đó. Như Vincent Zooneykind đã nói trong nhận xét của mình - thư viện PMML trong R có ý nghĩa đối với việc xuất mô hình nói chung nhưng "dự báo" không phải là một thư viện được hỗ trợ.

Cách khác là sử dụng một cái gì đó như https://www.opencpu.org/ để thực hiện cuộc gọi đến R từ chương trình java của bạn. Nó hiển thị mã R trên máy chủ http. Sau đó có thể gọi nó với các tham số như với một cuộc gọi http bình thường và trả về những gì là neede bằng cách sử dụng java.net.HttpUrlConnection hoặc một sự lựa chọn của các thư viện http có sẵn trong Java. Ưu điểm: Tách mối quan tâm, không cần phải viết lại mã R Nhược điểm: Gọi máy chủ R trong quá trình trực tiếp của bạn, vì vậy cần đảm bảo rằng được xử lý mạnh mẽ

Các vấn đề liên quan