jrubyからneticaを使う方法

ベイジアンネットワークでモデル構築できるneticaをjruby上から使う方法まとめました。

ruby用のバインディングを書けばいいのですが、そこまでではないのでjrubyを利用して、rubyコード上でneticaJを呼び出しneticaを利用します。
そもそもneticaをjruby上で利用するなんて奇特な人はあまりいないと思いますが、自分周辺のための備忘録です。

自分の環境がMacOSなのでそれを中心的に書いていきます。 Windowsでも動作確認はしています。

必要なもの

jruby
これがなければ始まりません
neticaJ
neticaをJavaで使うためのライブラリ
webget_netica
neticaJを簡単に使うためのgemライブラリ

これだけ。

インストール

jruby

基本はダウンロードして展開してPATHを通すだけです。簡単です。
自分はもっと簡単にhomebrewでbrew install jrubyしました。

neticaJ

neticaの開発元Norsysから

ダウンロードします。
OSのバージョンによって落とすバージョンが変わります。

■MacOS
Snow Leopard以降向け(64bit Java)
Tiger以降向け(32bit Java)

■Windows
windows

ダウンロードしたファイルを解凍し、bin以下をPATHが通っている場所へ配置します。
自分はホームディレクトリにlibディレクトリを作り、そこへ移動しました。

mkdir ~/lib/
mv ~/Downloads/NeticaJ_*/bin/* ~/lib

移動したNeticaJ.jarをCLASSPATHに足してください。
また移動したディレクトリをそれぞれの環境に合ったPATH変数(PATH(Windows) / DYLD_LIBRARY_PATH(Mac) / LD_LIBRARY_PATH(Linux))を足してください。

自分は以下を.zshrc(あるいは.bash_profileなど)に加えました。

export PATH=~/lib:$PATH
export CLASSPATH=$CLASSPATH:~/lib/NeticaJ.jar
export DYLD_LIBRARY_PATH=~/lib:$DYLD_LIBRARY_PATH

webget_netica

neticaJのJNIインターフェースをruby向けにラップしてくれるライブラリです。
gemコマンドでインストールできます。
依存関係であるactiverecordもインストールしますが、Version 2系列でないと動かないので注意します。

jruby -S gem install webget_netica
jruby -S gem install activerecord --version="<3.0"

インストールが環境するまで待つだけです。

動作確認

以下のプログラムをtest.rbとして保存します。
簡単なナイーブベイズです。

require 'rubygems'
require 'webget_netica'

Node.setConstructorClass("norsys.neticaEx.aliases.Node")
env = Environ::new(nil)
net = Net::new()

node_a = Node::new("A", "yes,no", net)
node_b = Node::new("B", "yes,no", net)
node_c = Node::new("C", "yes,no", net)

node_c.addLink(node_a)
node_b.addLink(node_a)

node_a.setCPTable([0.5, 0.5].to_java(:float))

node_b.setCPTable("yes", [0.6, 0.4].to_java(:float))
node_b.setCPTable("no", [0.1, 0.9].to_java(:float))

node_c.setCPTable("yes", [0.3, 0.7].to_java(:float))
node_c.setCPTable("no", [0.8, 0.2].to_java(:float))

node_b.finding().enterState("yes")
node_c.finding().enterState("yes")

net.compile()

result = node_a.getBeliefs()
p result[0]

net.finalize()

以下のように実行結果が帰ってくればOKです。

$ jruby test.rb
0.692307710647583

rubyやrubygemsのバージョンによってはDEPRECATION WARNINGなどをはかれることがありますが、動作に支障はありません。

あとはJavaと同じようにクラスを使いプログラミングしてください。
newや型まわりがruby特有になりますが、それ以外はJavaと同じです。

パターン認識と機械学習 上 - ベイズ理論による統計的予測
C. M. ビショップ
シュプリンガー・ジャパン株式会社
売り上げランキング: 110577

JRuby 徹底入門
JRuby 徹底入門

posted with amazlet at 10.12.31

株式会社イーシー・ワン
ソーテック社
売り上げランキング: 265888


コメントを残す

メールアドレスが公開されることはありません。