Jubatus Advent Calendar 2016の7日目です。
この記事では、Jubatusをプログラミング不要で使うことができるツール jubash を紹介します。
jubashとは
jubashはJubakitに同梱されているツールの1つです。
その名の通り、Jubatusを呼び出すためのシェルプログラムとして動作します。
jubashを使うと、Jubatusの提供するすべての機械学習APIをコマンドラインから対話的に呼び出すことができます。Jubatusで機械学習を行う場合、通常であればJubatusクライアントAPIを使用したプログラムを作成する必要がありますが、jubashを使えば学習/分析処理をコマンドラインで対話的に行うことができるため、コーディング不要でJubatusを使うことができます。 1
インストール
jubakit
パッケージをインストールすると、自動的に jubash
コマンドが使えるようになります。
$ pip install jubakit
$ which jubash
/Users/kenichi/.pyenv/shims/jubash
さっそく使ってみる
まずは、Jubatusサーバを起動します。ここでは分類エンジンを使用します。 2
$ jubaclassifier -f /opt/jubatus/share/jubatus/example/config/classifier/default.json &
2016-12-06 20:03:06,066 7697 INFO [server_util.cpp:429] starting jubaclassifier 1.0.0 RPC server at 192.168.122.211:9199
...
続けて、jubashを起動します。
$ jubash
[Jubatus:classifier<>@127.0.0.1:9199] #
このようにシェルプロンプトが表示されれば成功です。 3
jubashは、何もオプションを付けずに実行すると 127.0.0.1:9199
に接続します。
では、実際にデータを学習させてみましょう。
ここでは、「身長と服から性別を分類する」モデルを作ってみたいと思います。
jubashのシェルプロンプトに、API名とそのパラメタを、コマンドとその引数のイメージで指定します。(コピペしやすいようにシェルプロンプトを省略しています)
train male height 1.80 bottom jeans
これで1件のデータが学習されました。
この行は、「身長(height)が1.8メートルで服(bottom)がジーンズの人は男性(male)だよ、とJubatusに教える(train)」という意味です。
このようにスペース区切りでkey-valueの組を指定することで、様々なデータを使用して学習することができます。
さらに学習データを増やしてみましょう。
train male height 1.80 bottom jeans
train female height 1.56 bottom skirt
train male height 1.65 bottom chino
train female height 1.72 bottom jeans
train male height 1.82 bottom jeans
train female height 1.43 bottom skirt
train male height 1.76 bottom jeans
train female height 1.52 bottom skirt
ある程度データを学習したら、モデルを使って分類を行ってみましょう。
分類には classify
というAPIを使います。
[Jubatus:classifier<>@127.0.0.1:9199] # classify height 1.92 bottom chino
male: 1.36218726635
female: -0.726596474648
分析結果が表示されました。
maleのスコアがfemaleより高いので、身長1.92メートルで服がチノパンの人は男性の可能性が高いようです。
いろいろなデータで試してみてください。
[Jubatus:classifier<>@127.0.0.1:9199] # classify height 1.92 bottom skirt
female: 0.747189581394
male: -0.111598797143
[Jubatus:classifier<>@127.0.0.1:9199] # classify height 1.92 bottom jeans
male: 0.803386986256
female: -0.167796239257
Jubatusの提供する機械学習アルゴリズムは全てオンライン機械学習なので、 train
と classify
を好きな順番で呼び出すことができます。
その他のコマンド
help
コマンドで、jubashで利用可能なコマンドのリストが確認できます。 4
また、 help train
のようにAPI名を指定すると、さらに詳細な使い方を見ることができます。 5
[Jubatus:classifier<>@127.0.0.1:9199] # help
Commands:
=========
classify do_mix get_proxy_status load timeout
clear exit get_status reconnect train
connect get_config help save verbose
delete_label get_labels keepalive set_label
[Jubatus:classifier<>@127.0.0.1:9199] help train
Syntax: train label datum_key datum_value [datum_key datum_value ...]
Trains the model with given label and datum.
Bulk training is not supported on the command line.
まとめ
jubashを使うと、スペース区切りのkey-valueデータを用意するだけでプログラミングなしで機械学習を試してみることができます。まずは手元にあるデータを気軽に分析してみてはいかがでしょうか。
jubashの詳しい使い方は Jubakitのドキュメント や コマンドラインリファレンス をご覧ください。
明日は @TkrUdagawa さんがJubatusの多腕バンディット機能について解説してくれます。お楽しみに!
-
実環境で利用するアプリケーションを開発する場合は、クライアントAPIの利用を推奨します。 ↩
-
起動時に指定する設定ファイルの場所はインストール方法により異なります。Ubuntuであれば
/opt/jubatus/share/jubatus/example/config
, RHEL/CentOS であれば/usr/share/jubatus/example/config
, Homebrewであれば/usr/local/share/jubatus/example/config
, ソースから入れた場合は~/local/share/jubatus/example/config
です。 ↩ -
シェルプロンプトは
[Jubatus:エンジン名<クラスタ名>@IPアドレス:ポート番号] #
の形式です。スタンドアロンモードの場合はクラスタ名は空文字列です。 ↩ -
シェルプロンプトではTab補完も使えます。 ↩
-
利用するエンジンによって利用可能なAPI(コマンド)は変わります。 ↩