SlideShare a Scribd company logo
1 of 39
Download to read offline
第1回  Jubatusハンズオン


    2013年年 2⽉月18⽇日(⽉月)
       Jubatus Team
⾃自⼰己紹介

l    海野  裕也 (Yuya Unno)
l    Twitter: @unnonouno
l    株式会社Preferred Infrastructure

l    専⾨門
      l    ⾃自然⾔言語処理理
      l    テキストマイニング




                           2
今⽇日の⽬目標



            Jubatusを使って機械学習に触れてみる



l  初めて機械学習を使ってみる⼈人も対象です
l  機械学習の初歩から説明します
      l    ⾼高校数学くらいの知識識があればOK
l    詳しい⼈人にとっては少し退屈かもしれません


                        3
アジェンダ

l    イントロダクション

l    Jubatusを使ってみる

l    設定を変更更してみる




                      4
l    イントロダクション

l    Jubatusを使ってみる

l    設定を変更更してみる




                      5
JubatusはOSSの機械学習フレームワークです
  l    NTT  SIC*とPreferred  Infrastructureによる共同開発
  l    2011年年10⽉月よりOSSで公開  http://jubat.us/




        リアルタイム  
         ストリーム         分散並列列           深い解析
                            6	
*  NTT  SIC:  NTT研究所  サイバーコミュニケーション研究所  ソフトウェアイノベーションセンタ
機械学習は「データに基づいに機械が判断を⾏行行う」
技術




l    過去のデータにもとづいて⼈人が判断できるようになる
l    同じように過去のデータから機械が判断するようになる
      のが機械学習
                 7
複数の選択肢から1つ選ぶのが「多値分類問題」
l    ⼊入⼒力力xに対する出⼒力力yを予想するのが多値分類問題
l    機械学習の⼀一番基本的な問題設定
l    ⼊入出⼒力力の組みをたくさん教えこむ
                                 スポーツ記事
           文書	
                    or	
                                 芸能記事

                    分類器
                  (classifier)
                                 ⼈人物画像
           画像	
                                   or	
                                 動物画像
                      8
l    イントロダクション

l    Jubatusを使ってみる

l    設定を変更更してみる




                      9
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
今⽇日は分散の話はしません

l    今⽇日は単体で実⾏行行させます

l    分散させません




                    11
Jubatusはサーバー・クライアントモデルで動きま
す

                                    Jubatus
  ユーザープログ                       (jubaclassifier)
     ラム

          Jubatusクライ
                         通信	
             アント

            各種言語で実装	

l    Jubatusクライアント経由でサーバーと通信する
l    通信⽅方法などはクライアントライブラリが隠蔽している
l    クライアントはC++/Ruby/Python/Javaで⽤用意
                        12
サンプルを⽤用意したので実⾏行行してみましょう

      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
線形分類は重み付き多数決のイメージ
               男性	
                  女性	
  入力の特徴	
   短髪	
           1.8

      Tシャツ	
          0.3

      スカート	
                     3.2
                                            (+	
                               1.1      ⼥女女性だ!

l    特徴毎のスコアを加算して⼤大きい⽅方を採る

                        14
学習するときは間違いを正す⽅方向に重みを調整
               男性	
                  女性	
   天の声=正解	
  入力の特徴	
   短髪	
          2.5                     違います。男性
                                            です
      Tシャツ	
          0.8

      スカート	
                       2.8
                                          (+	
                                    これらの特徴は男性
                      0.5
                                      的なのかな?

l    判断が覆るように重みを調整する
l    学習アルゴリズム毎に重み調整の度度合いが異異なる
                            15
サンプルを読んでみよう

l    sample.pyの中は⼤大雑把には以下のとおり


#(前略略)

client = jubatus.Classifier(host, port)
train_data = [ ... ]
client.train(name, train_data)
test_data = [ ... ]
results = client.classify(name, test_data)

#(後略略)

                     16
Jubatusはクライアントオブジェクト経由で使う

l    最初にクライアントオブジェクトを⽣生成する
l    クライアントオブジェクト経由で操作する
#(前略略)

client = jubatus.Classifier(host, port)
train_data = [ ... ]
client.train(name, train_data)
test_data = [ ... ]
results = client.classify(name, test_data)

#(後略略)

                     17
正解のわかっているデータを使って学習(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
学習したら未分類のデータを分類(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
単体のデータを表すdatumクラスの構造に注意

l    ⽂文字列列情報と数値情報のリストを別々に指定する
l    それぞれは、キーと値のペアのリストになっている
      l    下のデータは、”hair”が”short”、“top”が”T shirt”、”height”が
            1.81と読む



datum(
  [('hair', 'short'), ('top', 'T shirt’),],
  [('height', 1.81)]
)


                                20
データを追加してみよう

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
ラベルを追加してみよう

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
l    イントロダクション

l    Jubatusを使ってみる

l    設定を変更更してみる




                      23
設定を⾒見見てみよう


                           特徴抽出の設定
{
    "converter" : {
      ...
                        学習⽅方法のパラメータ
    },
    "parameter" : {
      "regularization_weight" : 1.0
    },
    "method" : "PA1"
}
                            学習の⽅方法


                    24
学習アルゴリズムを変えてみよう

{
      "converter" : { ... },
      "parameter" : { ... },
      "method" : ”AROW"
}



l    “method” は学習アルゴリズムを指定する
l    “PA1” から  ”AROW” に変えてみる
l    利利⽤用できるアルゴリズムはドキュメント参照

                         25
パラメータを変えてみよう

{
      "converter" : { ... },
      "parameter" : {
        "regularization_weight" : 10.0
      },
      "method" : "PA1"
}


l    parameter はどのように学習するかの調整に使われる
l    学習で調整されるパラメータとは区別する意味で、ハイ
      パーパラメータと呼ばれる
l    よい値はデータやアプリケーションによって異異なる
                         26
残りの設定は特徴抽出の設定です

{
      "converter" : {
        ...
      },
      “parameter” : { ... },
      "method" : "PA1"
}

l    converter は⽣生のデータをどう扱うかの、特徴抽出に関
      する設定
l    設定のしどころであり、学習がうまくいくかの重要な部
      分
                         27
タスク固有の問題と⼿手法を分離離している


      特徴抽出	
                                           特徴分析	
                   分野に依存しない                                     様々な⼿手法・理理論論を
               特徴を捉えた抽象化されたデータ                                    適⽤用可能
     ⽂文書         (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
タスク固有の問題と⼿手法の分離離(続)

l    特徴抽出と特徴分析を分離離することが重要

l    データの種類、ドメイン、利利⽤用⽬目的に依存せず、様々な
      分析を利利⽤用可能なしくみを作ることができる

l    利利点
      l    システム開発・専⾨門家教育のコストを⼤大きく下げることができ
            る
      l    特徴抽出では各問題ドメインに専念念
      l    特徴分析では各分析⼿手法に専念念


                         29
⽣生のデータから特徴を抜き出すのが特徴抽出
l    ⼊入⼒力力された⽣生データの特徴をキーとバリューで表す
l    変換の⽅方法はデータの種類によって様々

               特徴ベクトル	
世の中ではビッグデー                                分析結果	
タというキーワードが          ビッグデータ            2
注⽬目されていますが,         世の中               1
⼀一⼝口にビッグデータと
                    キーワード             1       IT関連
いっても⽴立立場や観点に
よって定義は様々です.         定義                1


                  周囲が黄色         1
                  中心が茶          1
                  花びらの割合        0.7          ひまわり
                  ⾼高さ           150

                         30	
                                他の要素は0とする
デフォルトの設定では元の⼊入⼒力力をそのまま使ってい
ます
          {
              "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
⽂文字列列に対する処理理
 {
     "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
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
数値に対する処理理
{
    "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
num_rulesに数値データの変換規則を書きます

...
 ”num_rules" : [
   { "key" : "*”,
     "type" : ”num” }
 ],
...


l    key: * 全てのデータに対して
l    type: num 数値をそのまま使う



                        35
特徴の取り⽅方を⼯工夫することで分類精度度が変わりま
す
                         世の中ではビッグデータ…     1.0

  世の中ではビッグデー
  タというキーワードが
  注⽬目されていますが,            世の中        1.0
  ⼀一⼝口にビッグデータと
  いっても⽴立立場や観点に           ビッグデータ     2.0
  よって定義は様々です.
                         キーワード      1.0
                         ⽴立立場       1.0


l    特徴の粒粒度度が細かすぎても粗すぎても学習はうまくいか
      ない
                  36
スペース区切切りで特徴をとってみましょう
...
 "string_rules" : [
   { "key" : "*”,
     "type" : “space",
     "sample_weight" : "bin”,
     "global_weight" : "bin" }
 ],
...


l    スペース区切切りを使う場合はtypeにspaceを使う
l    他にも特徴の取り⽅方は設定で簡単に変えられるので、ド
      キュメントを参照
                     37
その他の情報源

l    ドキュメント
      l    http://jubat.us/ja/
      l    特徴抽出や設定周りもひと通り書いてある


l    メーリングリスト
      l    http://groups.google.com/group/jubatus


l    ソースとバグ報告
      l    https://github.com/jubatus/jubatus




                                    38
⾃自由に改変してみましょう

l    jubatus-example以下に、⾊色々サンプルがあるので試し
      てみる
      l    分類以外のサンプルもあるが、記述⾔言語が限られている


l    よく知られたデータセットを利利⽤用してみる
      l    http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets
      l    news20で検索索


l    Enjoy!



                                     39

More Related Content

What's hot

Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Yuya Unno
 

What's hot (20)

Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習2013.07.15 はじパタlt scikit-learnで始める機械学習
2013.07.15 はじパタlt scikit-learnで始める機械学習
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用
 
実装ディープラーニング
実装ディープラーニング実装ディープラーニング
実装ディープラーニング
 
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
 
Jupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep LearningJupyter NotebookとChainerで楽々Deep Learning
Jupyter NotebookとChainerで楽々Deep Learning
 
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
 
PythonによるDeep Learningの実装
PythonによるDeep Learningの実装PythonによるDeep Learningの実装
PythonによるDeep Learningの実装
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分ける
 
「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"「深層学習」勉強会LT資料 "Chainer使ってみた"
「深層学習」勉強会LT資料 "Chainer使ってみた"
 
LCCC2010:Learning on Cores, Clusters and Cloudsの解説
LCCC2010:Learning on Cores,  Clusters and Cloudsの解説LCCC2010:Learning on Cores,  Clusters and Cloudsの解説
LCCC2010:Learning on Cores, Clusters and Cloudsの解説
 
Active Object
Active ObjectActive Object
Active Object
 
Python 機械学習プログラミング データ分析演習編
Python 機械学習プログラミング データ分析演習編Python 機械学習プログラミング データ分析演習編
Python 機械学習プログラミング データ分析演習編
 
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages. Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
 
Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識Pythonとdeep learningで手書き文字認識
Pythonとdeep learningで手書き文字認識
 
TensorFlowの使い方(in Japanese)
TensorFlowの使い方(in Japanese)TensorFlowの使い方(in Japanese)
TensorFlowの使い方(in Japanese)
 
Chainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM についてChainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM について
 
Deep learning入門
Deep learning入門Deep learning入門
Deep learning入門
 
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
 
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
 

Viewers also liked

Viewers also liked (20)

Jubatus Python特徴抽出プラグイン
Jubatus Python特徴抽出プラグインJubatus Python特徴抽出プラグイン
Jubatus Python特徴抽出プラグイン
 
Jubatus: Jubakitでもっと楽をしよう
Jubatus: Jubakitでもっと楽をしようJubatus: Jubakitでもっと楽をしよう
Jubatus: Jubakitでもっと楽をしよう
 
JubaQLご紹介
JubaQLご紹介JubaQLご紹介
JubaQLご紹介
 
Jubaanomalyについて
JubaanomalyについてJubaanomalyについて
Jubaanomalyについて
 
jubarecommenderの紹介
jubarecommenderの紹介jubarecommenderの紹介
jubarecommenderの紹介
 
コンテンツマーケティングでレコメンドエンジンが必要になる背景とその活用
コンテンツマーケティングでレコメンドエンジンが必要になる背景とその活用コンテンツマーケティングでレコメンドエンジンが必要になる背景とその活用
コンテンツマーケティングでレコメンドエンジンが必要になる背景とその活用
 
まだCPUで消耗してるの?Jubatusによる近傍探索のGPUを利用した高速化
まだCPUで消耗してるの?Jubatusによる近傍探索のGPUを利用した高速化まだCPUで消耗してるの?Jubatusによる近傍探索のGPUを利用した高速化
まだCPUで消耗してるの?Jubatusによる近傍探索のGPUを利用した高速化
 
単語コレクター(文章自動校正器)
単語コレクター(文章自動校正器)単語コレクター(文章自動校正器)
単語コレクター(文章自動校正器)
 
Jubatus解説本の紹介
Jubatus解説本の紹介Jubatus解説本の紹介
Jubatus解説本の紹介
 
新聞から今年の漢字を予測する
新聞から今年の漢字を予測する新聞から今年の漢字を予測する
新聞から今年の漢字を予測する
 
かまってちゃん小町
かまってちゃん小町かまってちゃん小町
かまってちゃん小町
 
発言小町からのプロファイリング
発言小町からのプロファイリング発言小町からのプロファイリング
発言小町からのプロファイリング
 
Python 特徴抽出プラグイン
Python 特徴抽出プラグインPython 特徴抽出プラグイン
Python 特徴抽出プラグイン
 
Jubatus 1.0 の紹介
Jubatus 1.0 の紹介Jubatus 1.0 の紹介
Jubatus 1.0 の紹介
 
Jubakitの解説
Jubakitの解説Jubakitの解説
Jubakitの解説
 
小町のレス数が予測できるか試してみた
小町のレス数が予測できるか試してみた小町のレス数が予測できるか試してみた
小町のレス数が予測できるか試してみた
 
新機能紹介 1.0.6
新機能紹介 1.0.6新機能紹介 1.0.6
新機能紹介 1.0.6
 
銀座のママ
銀座のママ銀座のママ
銀座のママ
 
JUBARHYME
JUBARHYMEJUBARHYME
JUBARHYME
 
小町の溜息
小町の溜息小町の溜息
小町の溜息
 

Similar to 第1回 Jubatusハンズオン

Jubatusにおける大規模分散オンライン機械学習
Jubatusにおける大規模分散オンライン機械学習Jubatusにおける大規模分散オンライン機械学習
Jubatusにおける大規模分散オンライン機械学習
Preferred Networks
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
Akira Takahashi
 

Similar to 第1回 Jubatusハンズオン (20)

Jubatusにおける大規模分散オンライン機械学習
Jubatusにおける大規模分散オンライン機械学習Jubatusにおける大規模分散オンライン機械学習
Jubatusにおける大規模分散オンライン機械学習
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
Overview and Roadmap
Overview and RoadmapOverview and Roadmap
Overview and Roadmap
 
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
 
DTrace for biginners part(2)
DTrace for biginners part(2)DTrace for biginners part(2)
DTrace for biginners part(2)
 
エンジニアのための機械学習の基礎
エンジニアのための機械学習の基礎エンジニアのための機械学習の基礎
エンジニアのための機械学習の基礎
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
Machine Learning Fundamentals IEEE
Machine Learning Fundamentals IEEEMachine Learning Fundamentals IEEE
Machine Learning Fundamentals IEEE
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
 
Chainerの使い方と 自然言語処理への応用
Chainerの使い方と自然言語処理への応用Chainerの使い方と自然言語処理への応用
Chainerの使い方と 自然言語処理への応用
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
 

More from JubatusOfficial

More from JubatusOfficial (12)

地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAI地域の魅力を伝えるツアーガイドAI
地域の魅力を伝えるツアーガイドAI
 
jubabanditの紹介
jubabanditの紹介jubabanditの紹介
jubabanditの紹介
 
Jubakitの紹介
Jubakitの紹介Jubakitの紹介
Jubakitの紹介
 
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
データ圧縮アルゴリズムを用いたマルウェア感染通信ログの判定
 
Jubatus 新機能ハイライト
Jubatus 新機能ハイライトJubatus 新機能ハイライト
Jubatus 新機能ハイライト
 
Jubatusハンズオン 機械学習はじめてみた
Jubatusハンズオン 機械学習はじめてみたJubatusハンズオン 機械学習はじめてみた
Jubatusハンズオン 機械学習はじめてみた
 
"アレ"からJubatusを使う
"アレ"からJubatusを使う"アレ"からJubatusを使う
"アレ"からJubatusを使う
 
もくもく成果 IMAMASU
もくもく成果 IMAMASUもくもく成果 IMAMASU
もくもく成果 IMAMASU
 
Jubatusでuserとbrandのレコメンドを試してみた話
Jubatusでuserとbrandのレコメンドを試してみた話Jubatusでuserとbrandのレコメンドを試してみた話
Jubatusでuserとbrandのレコメンドを試してみた話
 
相撲
相撲相撲
相撲
 
興味ありそうなもの検索
興味ありそうなもの検索興味ありそうなもの検索
興味ありそうなもの検索
 
チーム:大杉さんの壮大な夢
チーム:大杉さんの壮大な夢チーム:大杉さんの壮大な夢
チーム:大杉さんの壮大な夢
 

第1回 Jubatusハンズオン

  • 1. 第1回  Jubatusハンズオン 2013年年 2⽉月18⽇日(⽉月) Jubatus Team
  • 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研究所  サイバーコミュニケーション研究所  ソフトウェアイノベーションセンタ
  • 7. 機械学習は「データに基づいに機械が判断を⾏行行う」 技術 l  過去のデータにもとづいて⼈人が判断できるようになる l  同じように過去のデータから機械が判断するようになる のが機械学習 7
  • 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
  • 11. 今⽇日は分散の話はしません l  今⽇日は単体で実⾏行行させます l  分散させません 11
  • 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
  • 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. 数値に対する処理理 { "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
  • 35. num_rulesに数値データの変換規則を書きます ... ”num_rules" : [ { "key" : "*”, "type" : ”num” } ], ... l  key: * 全てのデータに対して l  type: num 数値をそのまま使う 35
  • 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