第第第7 第777章章章章 次世代次世代サービスステーション ...125 第第第7第777章章章章 次世代次世代サービスステーションサービスステーションの
第14章集団学習
-
Upload
kei-furihata -
Category
Documents
-
view
1.950 -
download
4
Transcript of 第14章集団学習
R で学ぶデータサイエンスパターン認識
第 14 章
集団学習
降旗啓
集団学習
・コストが低い!(必要とするデータ量、学習時間)・精度、汎化能力高い!・欠損地を持つデータでも有効に作動
強力な判別器1個作って、判別させるより、弱学習器(決定木とか)を複数組み合わせて精度を上げる!!
他手法との比較
ちなみにこれは「 Random Forest 」集団学習一種今回は割愛。
ブースティング(boosting)
バギング( bagging )
(まずは) 2 値判別アルゴリズム
ブースティング(boosting)
バギング( bagging )
(まずは) 2 値判別アルゴリズム
バギングBootstrap AGGregatING
ブートストラップで弱学習器を集めるアルゴリズムブートストラップ法 ( ノンパラメトリック版 ) ブートストラップ小さな標本から得られた
母数の推定値の誤差を推定することが可能になり,その精度を調べることができる!!
~𝑉 𝐵=1𝐵−1∑𝑏=1
𝐵
( �̂�𝑚∗ (𝑏 )− �̂�𝑚∗ )2
~𝐵𝐵=�̂�𝑚∗ − �̂�𝑛
そこからブートストラップ推定量を求める
標本を擬似母集団と考えて
B 回(適当に定める)復元抽出を行う
𝑋= {𝑥1 ,𝑥2 ,…,𝑥 𝑖 ,…,𝑥𝑛} �̂�
𝑋 1∗={𝑥1∗ ,𝑥2∗ ,…,𝑥 𝑖∗ ,… ,𝑥𝑚∗ }
�̂�2
�̂�1
�̂�𝐵
ブートスラップ
標本
𝑋𝐵∗= {𝑥1∗ ,𝑥2∗ ,…, 𝑥𝑖∗ ,…,𝑥𝑚∗ }
𝑋 2∗={𝑥1∗ ,𝑥2∗ ,…,𝑥 𝑖∗ ,… ,𝑥𝑚∗ }
標本
母集団
ランダムサンプリング
リサンプリング
�̂�𝑚∗
バギング
バギングは、「教師付き標本」をブートストラップで 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 (𝑥 ; �̂�𝐵)
標本
リサンプリング
ブートスラップ
標本
回帰問題・・・平均 ( 各弱学習器に標本をぶちこんで , 各サンプルに ついて出力されたラベルを平均する )
んで、どのくらい優秀になった?バギング
𝑒=E𝑝 [ (𝑌 −h (𝑋 ) )2 ]
𝑒=𝑒+E𝑝 [E [ (h (𝑋 )−h ( 𝑋 ; �̂� ))2 ] ]
つまりバギング後、
弱学習器平均の標本推定値とのばらつき の分だけ 誤差少ない!
バギングの特徴
• 過学習を起こしやすかったり、局所解に陥りやすいものほど効果高い(出力の平均化)
• ブースティングと違って、弱学習器が事例を重み付け出来なくても適用でき容易
• それぞれの学習器が独立(並列に実行可)
貧弱な学習器の強化には向かない。➝ ( ex. 天気予報 50% であてるモデルをいくら 集めても、 50% のまま・・・)
バギング
ブースティング(boosting)
バギング( bagging )
2 値判別の 典型的なアルゴリズム
そこで!
ブースティング
• 各試行を独立じゃなくする• 弱学習器を追加する際、逐次的に学習させる。• 並列化が困難 2値判別・・・アダブースト、 U ブースト 多値判別・・・アダブースト M1 、 アダブースト M2
ブースティング
他手法との比較
ちなみにこれは「 Random Forest 」集団学習一種今回は割愛。
アダブースト・ U ブースト のイメージブースティング
間違ったものに敏感になる弱学習器を作ってく
・初期化
・ step1[ fの決定 ]
・ step2[α の計算 ]
・ step3[ 重み更新 ]
・出力
𝑤1 (𝑖 )= 1𝑛
𝐹 0 (𝑥 )=0
𝑓 𝑡 (𝑥 )=𝑎𝑟𝑔𝑚𝑖𝑛 𝑓 ∈ 𝐹∑𝑖=1
𝑛
𝑤𝑡 (𝑖 ) 𝐼 [ 𝑓 (𝑥𝑖 )≠ 𝑦 𝑖 ]
𝛼 𝑡=12log1−𝜀𝑡 ( 𝑓 𝑡 )𝜀𝑡 ( 𝑓 𝑡 )
𝑤𝑡+1 (𝑖 )=𝑒𝑥𝑝 (−𝐹𝑡 (𝑥 𝑖 ) 𝑦 𝑖)
∑𝑖=1
𝑛
𝑒𝑥𝑝 (−𝐹 𝑡 (𝑥 𝑖 ) 𝑦 𝑖 )
()
判別関数:𝐹 𝑇 (𝑥 )=∑𝑡=1
𝑇
𝛼 𝑡𝐹𝑡 (𝑥 ) 判別器: sgn
アダブースト アルゴリズム
回繰り返す
T
重み
重み付き誤り率
Step1 ・重みが大きなものを間違える 重み付き誤り率大➝ ・ 0≦重み付き誤り率≦ 0.5 (∵ ・ 0.5 になると更新不可 ( ∵
Step2 ・ α 0≧ ・ α 大ほど信頼度高い
Step3 ・ α 大ほど更新度合い大
結局このアルゴリズムはロス関数
の逐次的最小化を意味する。
・アダブーストを一般化したもの・ U 関数を導入しロス関数を逐次的最小化
( U は凸な単調増加関数)
1.2.
アダブーストと等価
ロジットブーストと等価3.マダブースト4. イーターブースト
U ブースト
𝑤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[ 重み更新 ]
アダブーストとほぼいっしょ
2 値から多値へ
• アダブースト、 U ブーストは 2 値で定義してた
• アダブースト M.1 、アダブースト M.2 という
は多値で定義したアルゴリズム
• M.1 はアダブーストを 2 値から G 値にしただけ
𝛽𝑡=log1−𝜀𝑡 ( 𝑓 𝑡 )𝜀𝑡 ( 𝑓 𝑡 )
𝑤𝑡+1 (𝑖 )=𝑤𝑡 (𝑖 )𝑒𝑥𝑝 (−𝛽𝑡 I [ 𝑓 𝑡 (𝑥 𝑖 )=𝑦 𝑖 ])
𝑍𝑡+1
判別
!ポイント! 重み付き誤り率> 0 , 5 になることもある重み付き誤り率≧ 0.5 のときは使えない!
それなりに“強い”弱学習器でないとだめ・・・
アダブースト M.1 アルゴリズム
・初期化
・ step1[ fの決定 ]
・ step2[α の計算 ]
・ step3[ 重み更新 ]
・出力
𝑤1 (𝑖 )= 1𝑛
𝑓 𝑡 (𝑥 )=𝑎𝑟𝑔𝑚𝑖𝑛 𝑓 ∈ 𝐹∑𝑖=1
𝑛
𝑤𝑡 (𝑖 ) 𝐼 [ 𝑓 (𝑥𝑖 )≠ 𝑦 𝑖 ]
判別器:
回繰り返す
T
M.1
M. 2
1 つ 1 つの判別器を多少ゆとりをもたせて考慮 .クラス集合に収まる?収まらない?として ,2 値判別として考える .
ex.晴れ、雨、雪の 3 ラベルの場合 2 値だったら , 「晴れ 40%」の弱い学習器が「雨 60% 」の弱学習器とできた。 しかし! 3 値になった瞬間、「晴れ 40%」は依然弱いまま・・・ でも要求は重み付き誤り率 0.5 より小・・・
ex.晴れ、雨、雪の 3 ラベルの場合 「晴れ」「晴れ以外」 , 「雨」「雨以外」 , 「雪」「雪以外」と考えれば 2 値で考えられる!
微妙・・・
どや!
𝑤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 アルゴリズム
やってることはいっしょより正確な判別器を選んで不正解に敏感になるように重み更新
R で実装
パッケージ ○バギング ・ adabag ・ ipred○ブースティング ・ ada ・ adabag○ランダムフォレスト ・ randomForest
Adabag パッケージ• バギングとブースティングが実装されてる• 弱学習器として決定木( rpart パッケー
ジ)• 関数 ・ bagging ・ boosting
bagging 関数
boosting
> 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 )
> 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 )
$confusionObserved ClassPredicted Class setosa versicolor virginicasetosa 26 0 0versicolor 0 17 3virginica 0 1 28 $error[1] 0.05333333
予測誤差:5%