Contenu connexe
Similaire à Rによるベイジアンネットワーク入門 (12)
Plus de Okamoto Laboratory, The University of Electro-Communications (19)
Rによるベイジアンネットワーク入門
- 2. はじめに
• 実現値 :確率変数がとる値
– 例:確率変数”天気” → ”天気”=☂, ”天気”=☁, ”天気”=☀
☂, ☁, ☀は”天気”がとる実現値
• 同時確率 :XとYが同時に起きる確率
– 𝑃 𝑋, 𝑌 = 𝑃 𝑋 𝑃(𝑌) (XとYが独立として)
• 条件付確率:Yを条件としてXが起きる確率
– 𝑃 𝑋|𝑌 = 𝑃 𝑋, 𝑌 /𝑃(𝑌)
• チェインルール:同時確率を条件付確率で計算
– 𝑃 𝑋, 𝑌, 𝑍 = 𝑃 𝑋, 𝑌 𝑍 𝑃 𝑍 = 𝑃 𝑋 𝑌, 𝑍 𝑃 𝑌 𝑍 𝑃(𝑍)
2017/1/7 パーティクルフィルタ研究会 2/14
- 3. ベイジアンネットワーク
• 確率変数の因果関係をグラフで表現
• 条件付き独立
– 矢印のない関係は条件付き独立
𝑋2
𝑋4
𝑋3𝑋1
𝑋5 𝑃(𝑋4|𝑋5)𝑃(𝑋5)
𝑃(𝑋2)
𝑃(𝑋1|𝑋2, 𝑋5)
𝑃(𝑋3|𝑋1)
𝑃(𝑋3, 𝑋1, 𝑋2, 𝑋4, 𝑋5)
= 𝑃(𝑋3|𝑋1, 𝑋2, 𝑋4, 𝑋5)
𝑃(𝑋1|𝑋2, 𝑋4, 𝑋5)
𝑃(𝑋2|𝑋4, 𝑋5)
𝑃(𝑋4|𝑋5)𝑃(𝑋5)
条件付独立で同時確率の
計算量を減らせる
2017/1/7 パーティクルフィルタ研究会
B A
原因から結果に矢印を引く
𝑃(𝐴|𝐵)
原因結果
原因の
確率変数
結果の
確率変数
Zを条件としてXとYは条件付き独立
⇋ 𝑃 𝑋, 𝑌 𝑍 = 𝑃 𝑋 𝑍 𝑃 𝑌 𝑍
条件付確率の定義より
𝑃 𝑋, 𝑌 𝑍 = 𝑃 𝑋 𝑌, 𝑍 𝑃 𝑌 𝑍
それぞれの右辺を比べると𝑃 𝑌 𝑍 を消去できて
𝑃 𝑋 𝑌, 𝑍 = 𝑃(𝑋|𝑍)
3/14
- 5. 本日の内容
𝑃 𝐴 = 𝑡𝑟𝑢𝑒, 𝐵 = 𝑡𝑟𝑢𝑒 =?
𝑃 𝐴 = 𝑓𝑎𝑙𝑠𝑒, 𝐵 = 𝑡𝑟𝑢𝑒 =?
1. hc関数による構造学習
2. bn.fit関数による条件付確率表の
作成
3. gRainによる厳密な推論
4. bnlearnによる近似推論
環境
– 言語
– Rのライブラリ
– OS
2017/1/7 パーティクルフィルタ研究会
Radhakrishnan Nagarajan,
Marco Scutari , Sophie Lèbre 著
『Bayesian Networks in R: with
Applications in Systems Biology
(Use R!)』
ISBN 978-1-4614-6446-4
:R(最新のもの)
:bnlearn, gRain
:mac, linux, windows
5/14
- 7. 1. hc関数による構造学習
#hill-climbingによる学習
res = hc(dataset, score='bic', debug=F, max.iter=10000)
𝑋1
𝑋3
𝑋4 𝑋2 𝑋1 𝑋2
𝑋1 𝑋2
𝑋1 𝑋2
𝑋1, 𝑋2
𝑋1, 𝑋3
𝑋1, 𝑋4
𝑋2, 𝑋3
𝑋2, 𝑋4
𝑋3, 𝑋4
Score
関数
6000
5000
3000
(𝑖1, 𝑖2)には を適用
データとのマッチ度
- スコアが改善
- max.iterに未到達
yes
no
終了
1イテレーション
終わらない場合は
max.iterを減らす
2017/1/7 パーティクルフィルタ研究会 7/14
- 10. 3. gRainによる厳密な推論(おすすめ)
#gRainによる厳密な推論
#コンパイル
model = compile(as.grain(fitted), propagate=T)
#エビデンスの設定
nodes = c(“X1") #エビデンスをセットする確率変数(複数可)
states = c("〇") #ノードにセットする実現値(複数可)
model.evidence = setEvidence(model,
nodes=nodes, states=states)
#p(X2,X1="○")の計算
state_predicted = querygrain(model.evidence,
nodes=c("X2"), type="marginal", exclude=F)
厳密推論のための計算
1.モラル化
2.三角化
3.クリーク
4.ジャンクションツリー
5.パラメータの再設定
推論を行う箇所
(compileの実行は一度でよい)
大量な確率変数、実現値ではcompile()で落ちる可能性
→ bnlearnによる近似推論(次スライド)
2017/1/7 パーティクルフィルタ研究会
𝑿 𝟐 =○ 𝑿 𝟐 =×
0.95 0.05
𝑃(𝑋2, 𝑋1 =○)
エビデンス予測したい
確率変数
10/14
- 11. 4. bnlearnによる近似推論
#bnlearnによる近似推論
#bnlearnではcompileはいらない
#エビデンスをセットと推論を一緒にできる
particles = cpdist(fitted, nodes='X2', evidence=(X1=="〇"))
#結果を見る
prop.table(table(particles))
近似推論の注意点
・ 実行毎に結果が変わる(乱数を用いているため)
・ エビデンスの設定が面倒
#paste関数などを用いて文字列を生成する
str_eval = '(X2=="〇")&(X3=="×")'
#生成した文字列をparseしてevalする
particles = cpdist(fitted, nodes='X2',
evidence=eval(parse(str_eval)))
2017/1/7 パーティクルフィルタ研究会
𝑿 𝟐 =○ 𝑿 𝟐 =×
0.95 0.05
𝑃(𝑋2, 𝑋1 =○)
エビデンス予測したい
確率変数
11/14
- 12. トラブルシューティング その1
• bn.fitで落ちる
– 原因:確率変数、実現値の数が多い → 対策:それらを減らす
• 推論(querygrain)の結果がNaN
– 原因:与えるエビデンスが多すぎる → 対策:エビデンスを減らす
𝑃 𝑋0 𝑋1, 𝑋2, … )
𝑿 𝟏 =○,
𝑿 𝟐 =○, …
𝑿 𝟏 =○,
𝑿 𝟐 =×, …
…
𝑿 𝟎 =○
𝑿 𝟎 =×
𝑋2
𝑋0𝑋1
⋮
原因の実現値の組み合わせ数
Error in table(data[, c(node, parents), drop = FALSE]) :
attempt to make a table with >= 2^31 elements
2017/1/7 パーティクルフィルタ研究会 12/14
𝑃 𝑋, 𝑌1 = 𝑦1, 𝑌2 = 𝑦2, … , 𝑌𝑛 = 𝑦 𝑛 = 𝑃 𝑋|𝑌1 = 𝑦1, 𝑌2 = 𝑦2, … , 𝑌𝑛 = 𝑦 𝑛 ×
𝑃(𝑌1 = 𝑦1, 𝑌2 = 𝑦2, … , 𝑌𝑛 = 𝑦 𝑛)原因=エビデンス結果
計算機で表せる
最小値を下回る
- 13. トラブルシューティング その2
2017/1/7 パーティクルフィルタ研究会
• 0頻度問題
– 条件付確率が0になると推論ができない
⇒数え上げで下駄をはかせる(スムージング)
– スムージングを行うオプション → method
• method='bayes':スムージング有り
• method='mle' :スムージング無し
– はかせる下駄の程度(Imaginary Sample Size) → iss
• 自動的に設定されるので指定しなくてもよい
• iss=20 :20サンプルの下駄上げ
#issも指定した計算例
fitted = bn.fit(res, dataset,
method='bayes', iss=20)
𝑿 𝟏=〇 𝑿 𝟏 =×
𝑿 𝟐=〇 0 12
𝑿 𝟐=× 21 152
𝑿 𝟏=〇 𝑿 𝟏 =×
𝑿 𝟐=〇 20 32
𝑿 𝟐=× 41 172
条件付確率
の計算へ+20
13/14
- 14. おわりに
• Rによるベイジアンネットワークの一通りの手順を紹介
– データセットから因果関係と条件付確率表の学習方法
– ベイジアンネットワークによる推論の2つの方法
• 厳密推論
• 近似推論
– トラブルシューティング
• 参考文献(全て英語)
– Radhakrishnan Nagarajan, Marco Scutari , Sophie Lèbre :
『Bayesian Networks in R: with Applications in Systems Biology (Use R!)』
– bnlearnのドキュメントおよびソースコード
https://cran.r-project.org/web/packages/bnlearn/bnlearn.pdf
https://github.com/cran/bnlearn
– gRainのドキュメントおよびソースコード
https://cran.r-project.org/web/packages/gRain/gRain.pdf
https://github.com/cran/gRain
2017/1/7 パーティクルフィルタ研究会 14/14