Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

第1回 Jubatusハンズオン

10,132 views

Published on

Published in: Technology
  • Be the first to comment

第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

×