第1回 Jubatusハンズオン

11,835 views

Published on

第1回 Jubatusハンズオン

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

×