Ruby + PyCallで機械学習をやってみた at Pydata Okinawa #23
機械学習といえばPythonがいますごい盛り上がりを見せていますが、Rubyでも最近 @mrknさんがPyCallというgemを作っていて、2月23日に行われたRuby Business Users Conference 2017で発表されたみたいです。
ということで
Ruby + PyCallで機械学習をやってみる
以前、Python 3.5, scikit-learn, pandasでKaggleのTitanicを使って機械学習のチュートリアルを行ったのでここのコードをRuby化してみる。
基となるPythonのコード
- Kaggleのデータ(train.csv, test.csv)をローカルのdataディレクトリに配置
- pandasでデータを加工
- scikit-learn RandomForestでmodelを作成
- 学習
- 評価
をやってます
これをRuby化する
比較してもらうと分かるんですが、ほとんどPythonのコードに近い状態でかけます。
違うところ
- pyfrom, pyimport でPythonのlibraryをimportする
- PythonのClassのmethodを呼ぶときには
.method
で呼び出す- lambdaで実行してる?
- PythonのDictionaryを使うために
PyCall::Dict
を使用している - methodへの引数はRubyの書き方に置き換える
ぐらいでした。
やってみて
用途としてはPython, Jupyter Notebookでごにょごにょしてモデルを作成して、成果物としてのmodelをscikit-learnのシリアライズで永続化、それをRuby, PyCallから呼び出して実行すると言う感じでしょうか。Railsのコードなんかからmodelへの呼び出しなんかはすごい簡単にできそうです。evalでもできそうだけど失敗したときとか困るし、PyCallに置き換えると良さそう。
まだPyCallの開発は始まったばかりのようなのでこれからどんどん良くなっていきそうですが、すでに今の段階でも十分良さが伝わってくるので期待したいです!何か開発手伝えることがあればやりたいですねー :)
Pydata Okinawa
今回はPydata Okinawa #23 のLT大会ということでPyCallについて 発表してきました。
機械学習に興味がある方で沖縄に居る方/来れる方はぜひお越しくださいー :)