olearning-prml8

25
Text Osaka PRML Learning 11 Kousuke Takeuchi

Upload: kousuke-takeuhi

Post on 08-Jul-2015

136 views

Category:

Technology


2 download

DESCRIPTION

Learning ML at GrandFront in Osaka, chapter11 source code: https://github.com/u651601f/OLerning-PRML

TRANSCRIPT

Page 1: Olearning-prml8

Text

Osaka PRML Learning 11Kousuke Takeuchi

Page 2: Olearning-prml8

CHAPTER 11系列データの分類

Page 3: Olearning-prml8

文字列のパターン認識文字のパターンを認識するためには、どのようなことを考えていけばよいか?

1. 文字列をバラバラにして、各文字を個別に認識させる。       → これまでのパターン認識のアルゴリズムを適応しやすい。

2. 文字の前後関係の規則性をパターン認識する。           → 文字列の認識精度を向上できる。

1はデータが文字数しかないのに対して、2は文字数+文字の組み合わせの数だけデータがあるので、計算速度が指数的に増えてしまう

Page 4: Olearning-prml8

SECTION 1系列データのモデル化

Page 5: Olearning-prml8

文字列から一般モデルへ「あ・い・う・え・お」の組み合わせを考えてみる

文字の長さは5で、組み合わせ総数は5! = 120通り

これを一般的にいうと「パターンの種類 c = 120, 系列の長さ m = 5」となる

k番目のパターンをx(k), k番目のパターンが属するクラスをy(k)で表し、それらのm(=5)個が属するパターンの系列をx, yで表すことにする。

Page 6: Olearning-prml8

具体的にどんなパターン認識をするのか?

「な・ん・や・そ・れ」の組み合わせを考える

系列の長さ m = 5

「なんやそれ」、「それなんや」、「それやんな」、「やんそれん」・・・などの組み合わせがある。

x(1) =「なんやそれ」、x(2) =「それなんや」、            x(3) =「それやんな」、x(4) = 「やんそれん」・・・

x(1) → y(1) = 疑問、x(2) → y(2) = 理解、x(3) → y(3) = 疑問、x(4), x(5), ・・・ → y(4), y(5),・・・= 意味不明 といった感じでクラス分け

パターン数は「疑問、理解、意味不明」の3つなので、c = 3

Page 7: Olearning-prml8

cクラスのパターン認識問題をm回解くだけでパターン系列全体を認識できる

前章のロジスティック回帰を用いると・・・

!

!

このクラス事後確率p(y;x)を用いて各パターンを認識

文字をバラバラに認識する場合

Page 8: Olearning-prml8

連続するパターンを認識する場合「こんにちは、お元気ですか?」という標本をラベル付け → 「あいさつ、疑問」

このラベルの並びからパターン認識すると、「あいさつ、疑問」→「挨拶定式文」

ex) 「お腹すいた、ご飯食べたい」→「状態、主張」→「何らかの催促」

一般化すると、x : 標本 → y : ラベル → z : ラベルとなる

この方法でパターン認識すると、指数的に計算が増えていく

Page 9: Olearning-prml8

そこで、ひとつ前のパターンのラベルy(k-1)が、ラベルy(k)に影響を与えると仮定する。

つまり、2つの隣り合ったラベルだけで連続的なパターン認識をする。→ c^2クラスと呼ぶ

ex.)「起・承・転・結」を連続パターン認識する場合は、(起, 承)、(承, 転)は認識するが、(起, 転)は認識しない。

このような手法を、条件付き確率場と呼ぶ

Page 10: Olearning-prml8

条件付き確率場

このq(y|x, ζ)を最大化するパラメータζを学習するので、最尤推定の公式は以下のようになる

Page 11: Olearning-prml8

SECTION 2 & 3

・条件付き確率場モデルの学習 !

・条件付き確率場モデルを用いた  ラベル系列の予測

Page 12: Olearning-prml8

条件付き確率場モデルを学習し、予測する・・・

「動的計画法」を用いて先ほどの数式を高速化し、より最適な確率場のパターン認識モデルを作成する

・・・と本には書いてありますが、数式が複雑すぎて30分では紹介&解説しきれません。

・・ということで、このセクションは無視して、   とりあえずプログラム書いてみましょう(笑)

Page 13: Olearning-prml8

テキスト回帰プログラムGithubのREADME.mdを評価する

Page 14: Olearning-prml8

どんなプログラムかGithubのREADME.mdに対して、☆の数を割り当てたものを訓練標本とする

全体の☆の分布が0~100の場合、50個以上星があれば優秀なREADME.mdという風に分類する

星の数は綺麗に分布していないので、優劣の境界値として、平均値ではなく中央値を採用する。

Page 15: Olearning-prml8

0

50

100

150

200

0 5 10 15 20

人数

☆の数☆たくさんの人が少ない

☆あんまりない人が多い

Page 16: Olearning-prml8

0

50

100

150

200

0 5 10 15 20

人数

☆の数

中央値 平均値

ほとんどの人が「劣」に分類されてしまう

今回のデータでは、☆の中央値:171, 平均値:433.9となった

Page 17: Olearning-prml8

1.README.mdと☆の個数データをJSONにまとめる

Page 18: Olearning-prml8

2. JSONデータからREADME.mdを取得

rjsonを用いてJSONをパース

RCurlでREADME.mdをGET

Page 19: Olearning-prml8

Markdownのテキストデータを行列に変換

Page 20: Olearning-prml8

ロジスティック回帰のライブラリを用いて 優秀なREADME.mdである確率を求める

使用したライブラリ: glmnet, boot          → 今回学んだことを全部勝手にやってくれるw

!

この関数によって、学習パラメータζを算出

Page 21: Olearning-prml8

データを使ってパラメータ算出

x : 先ほどの文字列のデータ

y : ☆の数が中央値よりも大きいなら1、小さいなら0と変換したもの

Page 22: Olearning-prml8

学習パラメータを使って 新たなREADME.mdを評価する

1.正規化パラメータ: λ

2.先ほど学習した パラメータを使用

3. 新たなmdを評価 !

Page 23: Olearning-prml8

結果は・・・?

threshold値:171で学習したものを使用

Page 24: Olearning-prml8

感想

改めてRのライブラリの便利さを思い知らされた

ただし、ライブラリの引数(λなど)の使い方を理解するためにも、ある程度は数学的に理解する必要あり

前回まではMS Officeでスライドを作ってたが、keynote使ったほうが100倍楽。keynote最強。

Page 25: Olearning-prml8

課題

たまにはサボりましょう。

次回で教科書の学習は最後になるので、残りの時間で作ってみたいサービスを10個くらい考える