さて、Red Data Toolsのプロダクトを色々見てきたわけですが、 結局Rubyで機械学習はできるのでしょうか。
結論としては、十分に可能 と言えるのではないでしょうか。 おそらく、PyCall全振り が最も正しい選択肢だと思います。 PyCallはパフォーマンスも十分高く、Pythonライブラリの中でされる処理はほぼPythonの速度そのままのようです。 特に機械学習だと、データを作ったらあとはライブラリに投げるだけというプログラムがほとんどでしょう。 データは使い慣れたRubyで作り、PyCallでPythonライブラリに投げるのが効率よくやれるような気がします。 ライブラリはPyCallに親和性が高いKeras一択でいいと思います。
Rubyの優れている点、それは何よりも pry
の存在です。
適当な場所に binding.pry
を入れて処理を止める、ls で変数を見る 、 cd で変数の中に入る という、
気が狂ったインタフェイスはやはり何物にも代えがたい最高の機能です。
Rubyの開発が楽しい理由の8割くらいは pry
の便利さが担っていると思っています。
処理を止めて変数をチェックできるだけで、実際に移植時の開発効率は格段に上がりました。
しかし、残念ながらPyCallのインスタンス自体に対しては pry
は無力です。
ここはなんとかしてほしいですね。
ぜひPython側のメソッド一覧が見えてほしいです。
やはり一番の問題点は、クラス定義が上手くPython世界に持っていけないことでしょう。
Pythonでクラスを書くなんて絶対やりたくないので、これはなんとしてでも解決して欲しいところです。
多分 pry
をなんとかすることにも繋がっていきそうです。
あとは .call
をなるべく避けられたらもっと自然なRubyになるのではないかと思います。
それ以外の点はおおむね特に問題なさそうに感じます。
少なくとも今後、Pythonで機械学習しようという気はもう全く起きません。
もうPythonのクソッタレな制御構文をググらなくていいんだ・・・
もう for
とかダサい文字列タイプしなくていいだ・・・と思うとこれからのやっていきが高まります。