6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JubatusAdvent Calendar 2016

Day 7

jubashを使ってお手軽に機械学習してみる

Posted at

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の提供する機械学習アルゴリズムは全てオンライン機械学習なので、 trainclassify を好きな順番で呼び出すことができます。

その他のコマンド

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の多腕バンディット機能について解説してくれます。お楽しみに!

  1. 実環境で利用するアプリケーションを開発する場合は、クライアントAPIの利用を推奨します。

  2. 起動時に指定する設定ファイルの場所はインストール方法により異なります。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 です。

  3. シェルプロンプトは [Jubatus:エンジン名<クラスタ名>@IPアドレス:ポート番号] # の形式です。スタンドアロンモードの場合はクラスタ名は空文字列です。

  4. シェルプロンプトではTab補完も使えます。

  5. 利用するエンジンによって利用可能なAPI(コマンド)は変わります。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?