第14章集団学習

29
R ででででででででででで でででででで で 14 で でででで ででで

Upload: kei-furihata

Post on 29-Jun-2015

1.950 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 第14章集団学習

R で学ぶデータサイエンスパターン認識

第 14 章

集団学習

降旗啓

Page 2: 第14章集団学習

集団学習

・コストが低い!(必要とするデータ量、学習時間)・精度、汎化能力高い!・欠損地を持つデータでも有効に作動

強力な判別器1個作って、判別させるより、弱学習器(決定木とか)を複数組み合わせて精度を上げる!!

Page 3: 第14章集団学習

他手法との比較

ちなみにこれは「 Random Forest 」集団学習一種今回は割愛。

Page 4: 第14章集団学習

ブースティング(boosting)

バギング( bagging )

     (まずは) 2 値判別アルゴリズム

Page 5: 第14章集団学習

ブースティング(boosting)

バギング( bagging )

     (まずは) 2 値判別アルゴリズム

Page 6: 第14章集団学習

バギングBootstrap AGGregatING

ブートストラップで弱学習器を集めるアルゴリズムブートストラップ法 ( ノンパラメトリック版 ) ブートストラップ小さな標本から得られた

母数の推定値の誤差を推定することが可能になり,その精度を調べることができる!!

~𝑉 𝐵=1𝐵−1∑𝑏=1

𝐵

( �̂�𝑚∗ (𝑏 )− �̂�𝑚∗ )2  

~𝐵𝐵=�̂�𝑚∗ − �̂�𝑛

そこからブートストラップ推定量を求める

標本を擬似母集団と考えて

B 回(適当に定める)復元抽出を行う

𝑋= {𝑥1 ,𝑥2 ,…,𝑥 𝑖 ,…,𝑥𝑛} �̂�

𝑋 1∗={𝑥1∗ ,𝑥2∗ ,…,𝑥 𝑖∗ ,… ,𝑥𝑚∗ }

�̂�2

�̂�1

�̂�𝐵

ブートスラップ

標本

𝑋𝐵∗= {𝑥1∗ ,𝑥2∗ ,…, 𝑥𝑖∗ ,…,𝑥𝑚∗ }

𝑋 2∗={𝑥1∗ ,𝑥2∗ ,…,𝑥 𝑖∗ ,… ,𝑥𝑚∗ }

標本

母集団

ランダムサンプリング

リサンプリング

�̂�𝑚∗

Page 7: 第14章集団学習

バギング

バギングは、「教師付き標本」をブートストラップで B 回抽出判別関数(決定木がおおい)にぶちこんで各々で母数を推定、弱学習器を作る()B 個の弱学習器から判別関数、判別器を決定

判別問題・・・多数決 ( 各弱学習器に標本をぶちこんで , 各サンプルにつ いて もっとも多いラベルを正しいラベルとみなす )𝐹 (𝑥 )=argmax𝑦∈𝑌∑

𝑏=1

𝐵

𝐼 [h(𝑥 ; �̂�𝑏)=𝑦 ] F (𝑥 )= 1𝐵∑𝑏=1

𝐵

h (𝑥; �̂�𝑏)

𝑋= {(𝑥1 , 𝑦1 ) , (𝑥1 , 𝑦1 )… (𝑥 𝑖 , 𝑦 𝑖) ,…, (𝑥𝑛 , 𝑦𝑛) , } h (𝑥 ; �̂� )

𝑋 1∗={(𝑥1∗ , 𝑦1∗ ) , (𝑥2∗ , 𝑦2∗ )… (𝑥 𝑖∗ , 𝑦 𝑖∗) ,… ,(𝑥𝑛∗ , 𝑦𝑛∗) }

𝑋𝐵∗={(𝑥1∗ , 𝑦1∗ ) , (𝑥2∗ , 𝑦 2∗ )… (𝑥𝑖∗ , 𝑦 𝑖∗ ) ,…, (𝑥𝑛∗ , 𝑦𝑛∗ )}

𝑋 2∗={(𝑥1∗ , 𝑦1∗ ) , (𝑥2∗ , 𝑦2∗ )… (𝑥 𝑖∗ , 𝑦 𝑖∗) ,… ,(𝑥𝑛∗ , 𝑦𝑛∗) } h (𝑥 ; �̂�2 )

h (𝑥 ; �̂�1)

h (𝑥 ; �̂�𝐵)

標本

リサンプリング

ブートスラップ

標本

回帰問題・・・平均 ( 各弱学習器に標本をぶちこんで , 各サンプルに ついて出力されたラベルを平均する )

Page 8: 第14章集団学習

んで、どのくらい優秀になった?バギング

𝑒=E𝑝 [ (𝑌 −h (𝑋 ) )2 ]

𝑒=𝑒+E𝑝 [E [ (h (𝑋 )−h ( 𝑋 ; �̂� ))2 ] ]

つまりバギング後、

   弱学習器平均の標本推定値とのばらつき                             の分だけ 誤差少ない!

Page 9: 第14章集団学習

バギングの特徴

• 過学習を起こしやすかったり、局所解に陥りやすいものほど効果高い(出力の平均化)

• ブースティングと違って、弱学習器が事例を重み付け出来なくても適用でき容易

• それぞれの学習器が独立(並列に実行可)

貧弱な学習器の強化には向かない。➝   ( ex. 天気予報 50% であてるモデルをいくら          集めても、 50% のまま・・・)

バギング

Page 10: 第14章集団学習

ブースティング(boosting)

バギング( bagging )

  2 値判別の  典型的なアルゴリズム

そこで!

Page 11: 第14章集団学習

ブースティング

• 各試行を独立じゃなくする• 弱学習器を追加する際、逐次的に学習させる。• 並列化が困難    2値判別・・・アダブースト、 U ブースト  多値判別・・・アダブースト M1 、           アダブースト M2

ブースティング

Page 12: 第14章集団学習

他手法との比較

ちなみにこれは「 Random Forest 」集団学習一種今回は割愛。

Page 13: 第14章集団学習

アダブースト・ U ブースト のイメージブースティング

間違ったものに敏感になる弱学習器を作ってく

Page 14: 第14章集団学習

・初期化

・ step1[ fの決定 ]

・ step2[α の計算 ]

・ step3[ 重み更新 ]

・出力

𝑤1 (𝑖 )= 1𝑛

𝐹 0 (𝑥 )=0

𝑓 𝑡 (𝑥 )=𝑎𝑟𝑔𝑚𝑖𝑛 𝑓 ∈ 𝐹∑𝑖=1

𝑛

𝑤𝑡 (𝑖 ) 𝐼 [ 𝑓 (𝑥𝑖 )≠ 𝑦 𝑖 ]

𝛼 𝑡=12log1−𝜀𝑡 ( 𝑓 𝑡 )𝜀𝑡 ( 𝑓 𝑡 )

𝑤𝑡+1 (𝑖 )=𝑒𝑥𝑝 (−𝐹𝑡 (𝑥 𝑖 ) 𝑦 𝑖)

∑𝑖=1

𝑛

𝑒𝑥𝑝 (−𝐹 𝑡 (𝑥 𝑖 ) 𝑦 𝑖 )

()

判別関数:𝐹 𝑇 (𝑥 )=∑𝑡=1

𝑇

𝛼 𝑡𝐹𝑡 (𝑥 ) 判別器: sgn

アダブースト アルゴリズム

回繰り返す

T

重み

重み付き誤り率

Page 15: 第14章集団学習

Step1  ・重みが大きなものを間違える                 重み付き誤り率大➝     ・ 0≦重み付き誤り率≦ 0.5                 (∵     ・ 0.5 になると更新不可 ( ∵

Step2 ・ α 0≧     ・ α 大ほど信頼度高い

Step3 ・ α 大ほど更新度合い大

   結局このアルゴリズムはロス関数

                 の逐次的最小化を意味する。

Page 16: 第14章集団学習

・アダブーストを一般化したもの・ U 関数を導入しロス関数を逐次的最小化

( U は凸な単調増加関数)

1.2.

アダブーストと等価

ロジットブーストと等価3.マダブースト4. イーターブースト

U ブースト 

Page 17: 第14章集団学習

𝑤U , 1 (𝑖 )= 1𝑛

𝛼 𝑡=12log1−𝜀𝑡 ( 𝑓 𝑡 )𝜀𝑡 ( 𝑓 𝑡 )

𝑤𝑡+1 (𝑖 )=𝑒𝑥𝑝 (−𝐹𝑡 (𝑥 𝑖 ) 𝑦 𝑖)

∑𝑖=1

𝑛

𝑒𝑥𝑝 (−𝐹 𝑡 (𝑥 𝑖 ) 𝑦 𝑖 )

𝐹 𝑡 (𝑥 )=𝐹𝑡 −1 (𝑥 )+𝛼 𝑡 𝑓 𝑡 (𝑥 )

𝛼 𝑡=argmin𝛼𝐿𝑈 (𝐹𝑡 −1+𝛼 𝑓 𝑡 )アダブースト

𝑤U , 𝑡+1 (𝑖 )=U ′ (−𝐹 𝑡 (𝑥 𝑖) 𝑦 𝑖 )

∑𝑖=1

𝑛

U ′ (−𝐹𝑡 (𝑥𝑖 ) 𝑦 𝑖)

U ブースト  アルゴリズム

・初期化

・ step1[ 決定 ]

・ step2[α の計算 ]

・ step3[ 更新 ]

・出力

𝐹 0 (𝑥 )=0

𝑓 𝑡 (𝑥 )=𝑎𝑟𝑔𝑚𝑖𝑛 𝑓 ∈ 𝐹∑𝑖=1

𝑛

𝑤𝑡 (𝑖 ) 𝐼 [ 𝑓 (𝑥𝑖 )≠ 𝑦 𝑖 ]

判別関数:𝐹 𝑇 (𝑥 )=∑𝑡=1

𝑇

𝛼 𝑡𝐹𝑡 (𝑥 ) 判別器: sgn

回繰り返す

T

・ step4[ 重み更新 ]

アダブーストとほぼいっしょ

Page 18: 第14章集団学習

2 値から多値へ

• アダブースト、 U ブーストは 2 値で定義してた

• アダブースト M.1 、アダブースト M.2 という

 は多値で定義したアルゴリズム

• M.1 はアダブーストを 2 値から G 値にしただけ

Page 19: 第14章集団学習

𝛽𝑡=log1−𝜀𝑡 ( 𝑓 𝑡 )𝜀𝑡 ( 𝑓 𝑡 )

𝑤𝑡+1 (𝑖 )=𝑤𝑡 (𝑖 )𝑒𝑥𝑝 (−𝛽𝑡 I [ 𝑓 𝑡 (𝑥 𝑖 )=𝑦 𝑖 ])

𝑍𝑡+1

判別

!ポイント! 重み付き誤り率> 0 , 5 になることもある重み付き誤り率≧ 0.5 のときは使えない!

それなりに“強い”弱学習器でないとだめ・・・

アダブースト M.1   アルゴリズム

・初期化

・ step1[ fの決定 ]

・ step2[α の計算 ]

・ step3[ 重み更新 ]

・出力

𝑤1 (𝑖 )= 1𝑛

𝑓 𝑡 (𝑥 )=𝑎𝑟𝑔𝑚𝑖𝑛 𝑓 ∈ 𝐹∑𝑖=1

𝑛

𝑤𝑡 (𝑖 ) 𝐼 [ 𝑓 (𝑥𝑖 )≠ 𝑦 𝑖 ]

判別器:

回繰り返す

T

Page 20: 第14章集団学習

M.1

M. 2

1 つ 1 つの判別器を多少ゆとりをもたせて考慮 .クラス集合に収まる?収まらない?として ,2 値判別として考える .

ex.晴れ、雨、雪の 3 ラベルの場合  2 値だったら , 「晴れ 40%」の弱い学習器が「雨 60% 」の弱学習器とできた。 しかし! 3 値になった瞬間、「晴れ 40%」は依然弱いまま・・・ でも要求は重み付き誤り率 0.5 より小・・・

ex.晴れ、雨、雪の 3 ラベルの場合  「晴れ」「晴れ以外」 , 「雨」「雨以外」 , 「雪」「雪以外」と考えれば   2 値で考えられる!

微妙・・・

どや!

Page 21: 第14章集団学習

𝑤1 (𝑖 ,𝑡 )=𝐼 [𝑦 ≠ 𝑦 𝑖 ]1

𝑛(𝐺−1)

𝑓 𝑡=𝑎𝑟𝑔𝑚𝑖𝑛 𝑓 ∈ 𝐹∑𝑖=1

𝑛

∑𝑦 ≠ 𝑦 𝑖

𝑤𝑡 (𝑖 , 𝑡 )h𝑓 (𝑥 𝑖 , 𝑦 )−h𝑓 (𝑥𝑖 , 𝑦 𝑖 )+1

2

𝛽𝑡=12log

1−𝜀𝑡 (h𝑓 𝑡 )𝜀𝑡 (h𝑓 𝑡 )

𝑤𝑡+1 (𝑖 , 𝑦 )=𝑒𝑥𝑝 (𝐻𝑡 (𝑥 𝑖 , 𝑦 )−𝐻𝑡 (𝑥 𝑖 , 𝑦 𝑖 ))

𝑍𝑡+1

判別

判別器:

h𝑇 (𝑥 , 𝑦 ) = I [𝑦∈f( 𝑥)] 弱学習器改め、 「弱仮説」

𝐻𝑡 (𝑥 , 𝑦 )=𝐻𝑡 −1 (𝑥 )+𝛼 𝑡h𝑓 𝑡 (𝑥 )

True? or false?

・初期化

・ step1[ 決定 ]

・ step2[α の計算 ]

・ step3[ 更新 ]

・出力

回繰り返す

T

・ step4[ 重み更新 ]

アダブースト M.2  アルゴリズム

やってることはいっしょより正確な判別器を選んで不正解に敏感になるように重み更新

Page 22: 第14章集団学習

R で実装

Page 23: 第14章集団学習

パッケージ  ○バギング   ・ adabag ・ ipred○ブースティング   ・ ada ・ adabag○ランダムフォレスト   ・ randomForest

Page 24: 第14章集団学習

Adabag パッケージ• バギングとブースティングが実装されてる• 弱学習器として決定木( rpart パッケー

ジ)• 関数  ・ bagging ・ boosting

Page 25: 第14章集団学習

bagging 関数

Page 26: 第14章集団学習

boosting

Page 27: 第14章集団学習

> library(kernlab)> data(spam)> set.seed(50)> tr.num<-sample(4601,2500)> spam.train<-spam[tr.num,]> spam.test<-spam[-tr.num,]> library(adabag)> spam.bag<-bagging(type~.,data=spam.train)> spam.predict<-predict(spam.bag,spam.test)> 1-spam.predict$error[1] 0.9057592

予測誤差 正判別率%

バギング( adabag )

Page 28: 第14章集団学習

> library(rpart)> library(adabag)> data <- iris> ndata <- nrow(data)> set.seed(101)> ridx <- sample(ndata, ndata * 0.5)> data.train <- data[ridx,]> data.test <- data[-ridx,]> data.adaCv <- boosting(Species ~ .,data = data.train, mfinal = 10)> resultPredict <- predict(data.adaCv, newdata = data.test, type="class")> resultPredict

アダブースト( adabag )

Page 29: 第14章集団学習

$confusionObserved ClassPredicted Class setosa versicolor virginicasetosa 26 0 0versicolor 0 17 3virginica 0 1 28 $error[1] 0.05333333

予測誤差:5%