Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第1回  Jubatusハンズオン

Yuya Unno
February 18, 2013

第1回  Jubatusハンズオン

Yuya Unno

February 18, 2013
Tweet

More Decks by Yuya Unno

Other Decks in Technology

Transcript

  1. ⾃自⼰己紹介 l  海野  裕也 (Yuya Unno) l  Twitter: @unnonouno l  株式会社Preferred

    Infrastructure l  専⾨門 l  ⾃自然⾔言語処理理 l  テキストマイニング 2
  2. JubatusはOSSの機械学習フレームワークです 6 リアルタイム ストリーム 分散並列列 深い解析 l  NTT SIC*とPreferred Infrastructureによる共同開発

    l  2011年年10⽉月よりOSSで公開 http://jubat.us/ * NTT SIC: NTT研究所 サイバーコミュニケーション研究所  ソフトウェアイノベーションセンタ
  3. Jubatusの分類器を起動しましょう l  jubaclassiferコマンドが分類器のサーバー l  -f で設定を指定して起動する 10 $ jubaclassifier can't

    start standalone mode without configpath specified usage: jubaclassifier [options] ... options: ... [略略] $ jubaclassifier -f /opt/jubatus/share/ jubatus/example/config/classifier/pa1.json
  4. サンプルを読んでみよう l  sample.pyの中は⼤大雑把には以下のとおり 16 #(前略略) client = jubatus.Classifier(host, port) train_data

    = [ ... ] client.train(name, train_data) test_data = [ ... ] results = client.classify(name, test_data) #(後略略)
  5. 正解のわかっているデータを使って学習(train)を⾏行行 う l  最初にクライアントオブジェクトを⽣生成する l  クライアントオブジェクト経由で操作する 18 client = jubatus.Classifier(host,

    port) train_data = [ ('male’, datum([('hair', 'short’), ...), ... ] client.train(name, train_data) test_data = [ ... ] results = client.classify(name, test_data)
  6. データを追加してみよう l  学習⽤用のデータを増やすと⼀一般的に分類性能が良良くなる l  無限に増やしても、全て当たるようになるわけではない 21 client = jubatus.Classifier(host, port)

    train_data = [ ('male’, datum([('hair', 'short’), ...), ... # ここにデータを追加 ] client.train(name, train_data) test_data = [ ... ] results = client.classify(name, test_data)
  7. ラベルを追加してみよう l  ラベルを細かくすると分類も細かくできる l  粒粒度度を細かくするとそれだけ正解率率率は落落ちるので注意 22 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)
  8. 設定を⾒見見てみよう 24 { "converter" : { ... }, "parameter" :

    { "regularization_weight" : 1.0 }, "method" : "PA1" } 特徴抽出の設定 学習⽅方法のパラメータ 学習の⽅方法
  9. 学習アルゴリズムを変えてみよう l  “method” は学習アルゴリズムを指定する l  “PA1” から ”AROW” に変えてみる l 

    利利⽤用できるアルゴリズムはドキュメント参照 25 { "converter" : { ... }, "parameter" : { ... }, "method" : ”AROW" }
  10. タスク固有の問題と⼿手法を分離離している 28 ⽂文書 (0, 1, 0, 2.5, -‐‑‒1, …) (1,

    0.5, 0.1, -‐‑‒2, 3, …) (0, 1, 0, 1.5, 2, …) 特徴ベクトル グラフィカルモデル 分類/回帰:SVM, LogReg, PA, CW, ALOW, Naïve Bayes CNB, DT, RF, ANN, … クラスタリング:K-‐‑‒means, Spectral Clustering, MMC, LSI, LDA, GM, … 構造分析:HMM, MRF, CRF, … 画像 センサ情報 ⾏行行動履履歴 分野に依存しない 特徴を捉えた抽象化されたデータ 様々な⼿手法・理理論論を 適⽤用可能 特徴抽出 特徴分析
  11. ⽣生のデータから特徴を抜き出すのが特徴抽出 l  ⼊入⼒力力された⽣生データの特徴をキーとバリューで表す l  変換の⽅方法はデータの種類によって様々 30 周囲が黄色 1 中心が茶 1

    花びらの割合 0.7 ⾼高さ 150 世の中ではビッグデー タというキーワードが 注⽬目されていますが, ⼀一⼝口にビッグデータと いっても⽴立立場や観点に よって定義は様々です. 他の要素は0とする ビッグデータ 2 世の中 1 キーワード 1 定義 1 IT関連 ひまわり 特徴ベクトル 分析結果
  12. デフォルトの設定では元の⼊入⼒力力をそのまま使ってい ます 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 文字列情報 数値情報
  13. ⽂文字列列に対する処理理 32 { "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 l  キーと値の組み合わ せで、1つの特徴に なるようにする l  値は1.0で固定
  14. string_rulesに⽂文字列列データの変換規則を書きます l  key: * 全てのデータに対して、 l  type: str 値をそのまま使う l 

    sample_weight, global_weight: 重み付けは1.0 33 ... "string_rules" : [ { "key" : "*”, "type" : "str", "sample_weight" : "bin”, "global_weight" : "bin" } ], ...
  15. 数値に対する処理理 34 { "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 l  キーと値をそのまま 特徴の値となるよう にする