More Related Content
Similar to 第1回 Jubatusハンズオン
Similar to 第1回 Jubatusハンズオン (20)
第1回 Jubatusハンズオン
- 2. ⾃自⼰己紹介
l 海野 裕也 (Yuya Unno)
l Twitter: @unnonouno
l 株式会社Preferred Infrastructure
l 専⾨門
l ⾃自然⾔言語処理理
l テキストマイニング
2
- 3. 今⽇日の⽬目標
Jubatusを使って機械学習に触れてみる
l 初めて機械学習を使ってみる⼈人も対象です
l 機械学習の初歩から説明します
l ⾼高校数学くらいの知識識があればOK
l 詳しい⼈人にとっては少し退屈かもしれません
3
- 4. アジェンダ
l イントロダクション
l Jubatusを使ってみる
l 設定を変更更してみる
4
- 5. l イントロダクション
l Jubatusを使ってみる
l 設定を変更更してみる
5
- 6. JubatusはOSSの機械学習フレームワークです
l NTT SIC*とPreferred Infrastructureによる共同開発
l 2011年年10⽉月よりOSSで公開 http://jubat.us/
リアルタイム
ストリーム 分散並列列 深い解析
6
* NTT SIC: NTT研究所 サイバーコミュニケーション研究所 ソフトウェアイノベーションセンタ
- 8. 複数の選択肢から1つ選ぶのが「多値分類問題」
l ⼊入⼒力力xに対する出⼒力力yを予想するのが多値分類問題
l 機械学習の⼀一番基本的な問題設定
l ⼊入出⼒力力の組みをたくさん教えこむ
スポーツ記事
文書
or
芸能記事
分類器
(classifier)
⼈人物画像
画像
or
動物画像
8
- 9. l イントロダクション
l Jubatusを使ってみる
l 設定を変更更してみる
9
- 10. Jubatusの分類器を起動しましょう
l jubaclassiferコマンドが分類器のサーバー
l -f で設定を指定して起動する
$ jubaclassifier
can't start standalone mode without
configpath specified
usage: jubaclassifier [options] ...
options:
... [略略]
$ jubaclassifier -f /opt/jubatus/share/
jubatus/example/config/classifier/pa1.json
10
- 12. Jubatusはサーバー・クライアントモデルで動きま
す
Jubatus
ユーザープログ (jubaclassifier)
ラム
Jubatusクライ
通信
アント
各種言語で実装
l Jubatusクライアント経由でサーバーと通信する
l 通信⽅方法などはクライアントライブラリが隠蔽している
l クライアントはC++/Ruby/Python/Javaで⽤用意
12
- 13. サンプルを⽤用意したので実⾏行行してみましょう
https://github.com/jubatus/jubatus-example
l jubaclassifierを起動した状態でサンプルを実⾏行行
l 以下の様な結果が出れば成功
$ cd jubatus-example/gender/python
$ ./gender.py
female 0.473417669535
male 0.388551652431 ラベルごとのスコア
female 2.79595327377
male -2.36301612854
13
- 14. 線形分類は重み付き多数決のイメージ
男性
女性
入力の特徴
短髪
1.8
Tシャツ
0.3
スカート
3.2
(+
1.1 ⼥女女性だ!
l 特徴毎のスコアを加算して⼤大きい⽅方を採る
14
- 15. 学習するときは間違いを正す⽅方向に重みを調整
男性
女性
天の声=正解
入力の特徴
短髪
2.5 違います。男性
です
Tシャツ
0.8
スカート
2.8
(+
これらの特徴は男性
0.5
的なのかな?
l 判断が覆るように重みを調整する
l 学習アルゴリズム毎に重み調整の度度合いが異異なる
15
- 16. サンプルを読んでみよう
l sample.pyの中は⼤大雑把には以下のとおり
#(前略略)
client = jubatus.Classifier(host, port)
train_data = [ ... ]
client.train(name, train_data)
test_data = [ ... ]
results = client.classify(name, test_data)
#(後略略)
16
- 17. Jubatusはクライアントオブジェクト経由で使う
l 最初にクライアントオブジェクトを⽣生成する
l クライアントオブジェクト経由で操作する
#(前略略)
client = jubatus.Classifier(host, port)
train_data = [ ... ]
client.train(name, train_data)
test_data = [ ... ]
results = client.classify(name, test_data)
#(後略略)
17
- 18. 正解のわかっているデータを使って学習(train)を⾏行行
う
l 最初にクライアントオブジェクトを⽣生成する
l クライアントオブジェクト経由で操作する
client = jubatus.Classifier(host, port)
train_data = [
('male’, datum([('hair', 'short’), ...),
...
]
client.train(name, train_data)
test_data = [ ... ]
results = client.classify(name, test_data)
18
- 19. 学習したら未分類のデータを分類(classify)する
l 最初にクライアントオブジェクトを⽣生成する
l クライアントオブジェクト経由で操作する
client = jubatus.Classifier(host, port)
train_data = [ ... ]
client.train(name, train_data)
test_data = [
datum([('hair', 'short'), ... ),
...
]
results = client.classify(name, test_data)
19
- 20. 単体のデータを表すdatumクラスの構造に注意
l ⽂文字列列情報と数値情報のリストを別々に指定する
l それぞれは、キーと値のペアのリストになっている
l 下のデータは、”hair”が”short”、“top”が”T shirt”、”height”が
1.81と読む
datum(
[('hair', 'short'), ('top', 'T shirt’),],
[('height', 1.81)]
)
20
- 21. データを追加してみよう
l 学習⽤用のデータを増やすと⼀一般的に分類性能が良良くなる
l 無限に増やしても、全て当たるようになるわけではない
client = jubatus.Classifier(host, port)
train_data = [
('male’, datum([('hair', 'short’), ...),
...
# ここにデータを追加
]
client.train(name, train_data)
test_data = [ ... ]
results = client.classify(name, test_data)
21
- 22. ラベルを追加してみよう
l ラベルを細かくすると分類も細かくできる
l 粒粒度度を細かくするとそれだけ正解率率率は落落ちるので注意
client = jubatus.Classifier(host, port)
train_data = [
('male (adult)’, datum([('hair',
'short’), ...),
...
]
client.train(name, train_data)
test_data = [ ... ]
results = client.classify(name, test_data)
22
- 23. l イントロダクション
l Jubatusを使ってみる
l 設定を変更更してみる
23
- 24. 設定を⾒見見てみよう
特徴抽出の設定
{
"converter" : {
...
学習⽅方法のパラメータ
},
"parameter" : {
"regularization_weight" : 1.0
},
"method" : "PA1"
}
学習の⽅方法
24
- 25. 学習アルゴリズムを変えてみよう
{
"converter" : { ... },
"parameter" : { ... },
"method" : ”AROW"
}
l “method” は学習アルゴリズムを指定する
l “PA1” から ”AROW” に変えてみる
l 利利⽤用できるアルゴリズムはドキュメント参照
25
- 26. パラメータを変えてみよう
{
"converter" : { ... },
"parameter" : {
"regularization_weight" : 10.0
},
"method" : "PA1"
}
l parameter はどのように学習するかの調整に使われる
l 学習で調整されるパラメータとは区別する意味で、ハイ
パーパラメータと呼ばれる
l よい値はデータやアプリケーションによって異異なる
26
- 27. 残りの設定は特徴抽出の設定です
{
"converter" : {
...
},
“parameter” : { ... },
"method" : "PA1"
}
l converter は⽣生のデータをどう扱うかの、特徴抽出に関
する設定
l 設定のしどころであり、学習がうまくいくかの重要な部
分
27
- 28. タスク固有の問題と⼿手法を分離離している
特徴抽出
特徴分析
分野に依存しない 様々な⼿手法・理理論論を
特徴を捉えた抽象化されたデータ 適⽤用可能
⽂文書 (0, 1, 0, 2.5, -‐‑‒1, …) 分類/回帰:SVM, LogReg,
(1, 0.5, 0.1, -‐‑‒2, 3, …) PA, CW, ALOW, Naïve Bayes
(0, 1, 0, 1.5, 2, …) CNB, DT, RF, ANN, …
特徴ベクトル
画像 クラスタリング:K-‐‑‒means,
Spectral Clustering, MMC,
LSI, LDA, GM, …
⾏行行動履履歴 グラフィカルモデル 構造分析:HMM, MRF, CRF, …
センサ情報 28
- 29. タスク固有の問題と⼿手法の分離離(続)
l 特徴抽出と特徴分析を分離離することが重要
l データの種類、ドメイン、利利⽤用⽬目的に依存せず、様々な
分析を利利⽤用可能なしくみを作ることができる
l 利利点
l システム開発・専⾨門家教育のコストを⼤大きく下げることができ
る
l 特徴抽出では各問題ドメインに専念念
l 特徴分析では各分析⼿手法に専念念
29
- 30. ⽣生のデータから特徴を抜き出すのが特徴抽出
l ⼊入⼒力力された⽣生データの特徴をキーとバリューで表す
l 変換の⽅方法はデータの種類によって様々
特徴ベクトル
世の中ではビッグデー 分析結果
タというキーワードが ビッグデータ 2
注⽬目されていますが, 世の中 1
⼀一⼝口にビッグデータと
キーワード 1 IT関連
いっても⽴立立場や観点に
よって定義は様々です. 定義 1
周囲が黄色 1
中心が茶 1
花びらの割合 0.7 ひまわり
⾼高さ 150
30
他の要素は0とする
- 31. デフォルトの設定では元の⼊入⼒力力をそのまま使ってい
ます
{
"hair": "short",
"top": "T shirt",
"bottom": "jeans",
"height": 1.70
}
文字列情報
数値情報
hair=short 1.0
top=T shirt 1.0
bottom=jeans 1.0
height 1.70
31
- 32. ⽂文字列列に対する処理理
{
"hair": "short", l キーと値の組み合わ
"top": "T shirt", せで、1つの特徴に
"bottom": "jeans", なるようにする
"height": 1.70
}
l 値は1.0で固定
hair=short 1.0
top=T shirt 1.0
bottom=jeans 1.0
height 1.70
32
- 34. 数値に対する処理理
{
"hair": "short", l キーと値をそのまま
"top": "T shirt", 特徴の値となるよう
"bottom": "jeans", にする
"height": 1.70
}
hair=short 1.0
top=T shirt 1.0
bottom=jeans 1.0
height 1.70
34
- 36. 特徴の取り⽅方を⼯工夫することで分類精度度が変わりま
す
世の中ではビッグデータ… 1.0
世の中ではビッグデー
タというキーワードが
注⽬目されていますが, 世の中 1.0
⼀一⼝口にビッグデータと
いっても⽴立立場や観点に ビッグデータ 2.0
よって定義は様々です.
キーワード 1.0
⽴立立場 1.0
l 特徴の粒粒度度が細かすぎても粗すぎても学習はうまくいか
ない
36
- 37. スペース区切切りで特徴をとってみましょう
...
"string_rules" : [
{ "key" : "*”,
"type" : “space",
"sample_weight" : "bin”,
"global_weight" : "bin" }
],
...
l スペース区切切りを使う場合はtypeにspaceを使う
l 他にも特徴の取り⽅方は設定で簡単に変えられるので、ド
キュメントを参照
37
- 38. その他の情報源
l ドキュメント
l http://jubat.us/ja/
l 特徴抽出や設定周りもひと通り書いてある
l メーリングリスト
l http://groups.google.com/group/jubatus
l ソースとバグ報告
l https://github.com/jubatus/jubatus
38
- 39. ⾃自由に改変してみましょう
l jubatus-example以下に、⾊色々サンプルがあるので試し
てみる
l 分類以外のサンプルもあるが、記述⾔言語が限られている
l よく知られたデータセットを利利⽤用してみる
l http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets
l news20で検索索
l Enjoy!
39