chakokuのブログ(rev4)

日々のごった煮ブログです

機械学習;Jubatusを入れてみる

自分はサーバ関連技術で飯食ってるのですが、業界の黒船とも言える機械学習の盛り上がりで今後は技術の大変革があって、最悪の場合、今のままでは食っていけなくなるのでは?と思えて、統計学とかまったく分からないのだけど、分からないなりに独習を開始。機械学習を学ぶにあたり、普段はPythonを使っているので、SciPyとかをベースに勉強したいのだけど、和製の機械学習プラットフォームとしてJubatusが良いと人から聞いたので、自宅PCに入れてみることにした。PC環境はWindowsの上でVMWare Playerで仮想化してUbuntuを走らせているので、Ubuntuにインストール。Ubuntuに入れる分にはJubatusの公式サイトにインストール手順が公開されているのでその通りにやれば問題なく入る。
■サーバ側の構築
file:/etc/apt/sources.list.d/jubatus.list を追加


deb http://download.jubat.us/apt binary/
apt-getでパッケージをインストール

sudo apt-get update
sudo apt-get install jubatus
以下の通り、すんなり入る

$ dpkg --list | grep jubatus
ii jubatus 0.8.0-1 amd64 Distributed processing framework and streaming machine learning library
JubatusはClient/Serverモデルで動作するらいしので、Server側を起動してみる

$ source /opt/jubatus/profile
$ /opt/jubatus/bin/jubaclassifier -f /opt/jubatus/share/jubatus/example/config/classifier/pa.json &
Listenしていることを確認(デフォルトで9199ポート)

$ netstat -na | grep -i listen
*略*
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9199 0.0.0.0:* LISTEN
*略*

■Client側の設定
PCのWindows環境ではcygwinを走らせている。cygwin環境でpipが動くようにしてから、jubatusようパッケージをインストール


wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
easy_install pip
pip install jubatus
tutorialをgitから取ってきて、サンプルデータも取ってくる

git clone https://github.com/jubatus/jubatus-tutorial-python.git
cd jubatus-tutorial-python
wget http://qwone.com/~jason/20Newsgroups//20news-bydate.tar.gz
tar xvzf 20news-bydate.tar.gz

■サーバ側再設定
チュートリアル用のコンフィグに入れ替えてjubatusを再度起動


/opt/jubatus/bin/jubaclassifier -f config.json &

■Client側Pythonプログラム起動


$ python tutorial.py
WARNING:tornado.general:Connect error on fd 5: ECONNREFUSED
WARNING:tornado.general:Connect error on fd 5: ECONNREFUSED
WARNING:tornado.general:Connect error on fd 5: ECONNREFUSED
tutorialを走らせるとエラーになる。多分ローカルホストに接続に行ってるためと思われる。jubatusが稼働するサーバを指定して起動する必要がある。。

tutorial.pyを確認すると-sオプションで接続先サーバを指定できるので、Ubuntuが走っている仮想サーバのIPを指定して再度実行。今度は正しく起動されて、処理結果が返却された


$ python tutorial.py -s 192.168.16.128

{
"method": "PA",
"converter": {
"string_filter_types": {
"detag": { "method": "regexp", "pattern": "<[^>]*>", "replace": "" }
},
"string_filter_rules": [
{ "key": "message", "type": "detag", "suffix": "-detagged" }
],
"num_filter_types": {},
"num_filter_rules": [],
"string_types": {},
"string_rules": [
{ "key": "message-detagged", "type": "space", "sample_weight": "bin", "global_weight": "bin"}
],
"num_types": {},
"num_rules": []
},
"parameter": {}
}

*略*

OK,sci.med, sci.med, 0.584435760975
NG,sci.electronics, soc.religion.christian, 0.37116548419
OK,talk.politics.guns, talk.politics.guns, 1.49401080608
OK,rec.sport.hockey, rec.sport.hockey, 1.0699224472
===================
OK: 5398
NG: 2134

一応は動いたけど、、これは教師ありデータの学習結果と理解していますが、OK:5398,NG:2134って失敗が結構多いように思うけど、これでいいのかいな。。まずはソースを読んで、何をやってるデモなのか?から理解が必要です。

■補足
機械学習を理解しようとする目的は、今後、IT業界の大どんでん返しが来ても喰いっぱくれないようにというのと、BMI/BCIネタを細々と取り組んでおり、計測できた脳波データに対してそのままでは使いものにならないので、FFTなりで特徴を抽出して、特徴パラメータ(ベクトル?)を機械学習にかけて、どんな意味を持っているのか意味抽出をする必要がありまして、、そういった2つの目的があるのでした。さらに、、大学の頃AIがブームの終わりかけで、研究室でのテーマがMachine Leraningだったのだけど、、今のMLって結局のところ、統計学だろうが!これは!?という違和感もあって。。

■ご参考URL
Jubatusオフィシャルサイト;インストール手順のページ
http://jubat.us/ja/quickstart.html#ubuntu-server-12-04-lts-64-bit
Ubuntu Server 12.04 LTS (64-bit)