Slide 1

Slide 1 text

0 確率的プログラミング⼊⾨ 2024-11-01 第107回NearMe技術勉強会 Takuma KAKINOUE

Slide 2

Slide 2 text

1 概要 ● 確率的プログラミングとは ○ ある統計モデルに従う変数に対して,具体的な値が未定の状態(サンプリング 前の状態)でも演算が適⽤可能なプログラミングパラダイムのこと ■ 具体的に⾔うと,例えばガンマ分布に従う変数X,Yを定義した場合, X,Yに対して四則演算(ex. X*2, X+Y)を実⾏すると,内部で⾃動的に 統計モデルの更新が⾏われサンプリング時に演算が反映されている ○ ベイズ統計モデリングがよく⽤いられる ● 今回やること ○ ベイズ推定について解説 ○ MCMC(マルコフ連鎖モンテカルロ法)について解説 ○ PyMCのサンプルコードを動かす

Slide 3

Slide 3 text

2 ベイズ推定 ● 最尤推定との違い ○ 推定したいパラメータθを定数として出⼒するのが最尤推定 ○ θを確率変数と⾒て,θが従う確率分布を出⼒するのがベイズ推定 ■ 何かしらの確率分布(事前分布)を仮定し,観測されたデータセットに フィッティングするように事前分布を更新することで事後分布を得る ● ベイズ推定のイメージ ○ (注意)フリーハンド なので謎な確率分布 になっています!

Slide 4

Slide 4 text

3 ベイズ推定 ● ベイズの定理を⽤いて事前分布と事後分布の関係を式で表す ● 事前分布と事後分布が同じ形の分布になる場合 ○ 解析的に事後分布を求められる! → 共役事前分布と呼ぶ 分母の積分計算が 難しい場合は, MCMC で近似!

Slide 5

Slide 5 text

4 ベイズ推定 ● 共役事前分布の例(ベータ⼆項分布) ● 共役事前分布が存在しない場合の近似⼿法 → MCMC(マルコフ連鎖モンテカルロ),スライドp.7から解説!

Slide 6

Slide 6 text

5 (補⾜)ベイズ推定と最尤推定 ● ベータ⼆項分布におけるpの期待値を算出(最頻値を推定量にすることもある) ● 最尤推定と異なり,a,bの項(事前知識)を加味している ○ つまり,データ数が少ないときは観測データを信じすぎないとも⾔える ● また,データ数が⼗分多ければベイズ推定量はx/n(UMVUE)に近づく!

Slide 7

Slide 7 text

6 MCMC(マルコフ連鎖モンテカルロ法,Markov Chain Monte Carlo methods) ● 前提理論 つまり,事後分布からサンプリングされる任意のθの確率密度は, ”尤度関数L(x,θ)と事前分布の積”にそのθを代⼊した値に⽐例する! →”尤度関数L(x,θ)と事前分布の積”から事後分布を⽣成できる!

Slide 8

Slide 8 text

7 MCMC(マルコフ連鎖モンテカルロ法,Markov Chain Monte Carlo methods) 概念的なアルゴリズム 1. 初期位置を決める 2. 「現在位置」から「次に遷移する位置」を確率的に決める 3. 「現在位置の確率密度」より「2で決めた次の位置の確率密度」が ⼤きければ確率1で遷移し,⼩さければ確率qで遷移する 4. iteration数を+1して,最⼤iteration数に達していなければ2に戻る 5. 遷移の軌跡から最初の数千個(バーンイン期間)を取り除き,残りの軌跡を出⼒する

Slide 9

Slide 9 text

8 サンプルコードを動かす ● 今回使うライブラリ → PyMC ● サンプルコード(参考⽂献から引⽤) ○ https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesi an-Methods-for-Hackers ■ 今回は,Chapter1のコードを解説 ■ notebookを読むだけでもすごく勉強になるのでオススメ!

Slide 10

Slide 10 text

9 参考⽂献(サンプルコードを引⽤) ● Pythonで体験するベイズ推論 ○ https://www.morikita.co.jp/books/ mid/007791

Slide 11

Slide 11 text

10 Thank you