SlideShare une entreprise Scribd logo
1  sur  14
Rによるベイジアン
ネットワーク入門
○今井俊輔 岡本一志
電気通信大学
2017/1/7 パーティクルフィルタ研究会 1/14
はじめに
• 実現値 :確率変数がとる値
– 例:確率変数”天気” → ”天気”=☂, ”天気”=☁, ”天気”=☀
☂, ☁, ☀は”天気”がとる実現値
• 同時確率 :XとYが同時に起きる確率
– 𝑃 𝑋, 𝑌 = 𝑃 𝑋 𝑃(𝑌) (XとYが独立として)
• 条件付確率:Yを条件としてXが起きる確率
– 𝑃 𝑋|𝑌 = 𝑃 𝑋, 𝑌 /𝑃(𝑌)
• チェインルール:同時確率を条件付確率で計算
– 𝑃 𝑋, 𝑌, 𝑍 = 𝑃 𝑋, 𝑌 𝑍 𝑃 𝑍 = 𝑃 𝑋 𝑌, 𝑍 𝑃 𝑌 𝑍 𝑃(𝑍)
2017/1/7 パーティクルフィルタ研究会 2/14
ベイジアンネットワーク
• 確率変数の因果関係をグラフで表現
• 条件付き独立
– 矢印のない関係は条件付き独立
𝑋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
ベイジアンネットワークの応用例(併せ買いの推薦)
• 併せ買いの確率としての同時確率
– 例:P( =○, =○) = 0.98
⇒ パンとコーヒーは98%で一緒に買われる
• 情報推薦としてのベイジアンネットワーク
P( =○, =○)=0.98
P( =○, =○)=0.65
⋮
max{P( =○,?=○)}
構造学習
○ × ○
× ○ ○
⋮
2017/1/7 パーティクルフィルタ研究会 4/14
本日の内容
𝑃 𝐴 = 𝑡𝑟𝑢𝑒, 𝐵 = 𝑡𝑟𝑢𝑒 =?
𝑃 𝐴 = 𝑓𝑎𝑙𝑠𝑒, 𝐵 = 𝑡𝑟𝑢𝑒 =?
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
下準備
#bnleranとgRainのインストール(詳細はhttps://www.bioconductor.org)
source("https://bioconductor.org/biocLite.R")
biocLite(c("bnlearn", "gRain"))
#ライブラリの読み込み
library(bnlearn)
library(gRain)
#データセットの読み込み
dataset = read.csv("./dataset.csv", header=T, row.names=T, colClasses="factor")
id 確率変数𝑿 𝟏 確率変数𝑿 𝟐 確率変数𝑿 𝟑 ・・・
1 ○ × ○
2 × ○ ○
⋮ ⋱
factor型で読む
テーブル形式のデータ
2017/1/7 パーティクルフィルタ研究会 6/14
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
2. bn.fit関数による条件付確率表の作成
#条件付確率表(CPT:ConditionalProbabilityTable)
の計算
fitted = bn.fit(res, dataset, method='bayes')
𝑃 𝑋2 𝑋1)𝑃(𝑋1)
𝑿 𝟏=〇 0.60
𝑿 𝟏=× 0.40
𝑿 𝟏=〇 𝑿 𝟏 =×
𝑿 𝟐=〇 0.60 0.45
𝑿 𝟐=× 0.40 0.55
id 𝑿 𝟏 𝑿 𝟐 𝑿 𝟑 ⋯
1 ○ × ○
2 × ○ ○
⋮ ⋱
数え上げる
𝑋1 𝑋2
2017/1/7 パーティクルフィルタ研究会
0頻度問題を回避
8/14
推論とその方法
• 推論とは
– エビデンス(わかっていること)を与えて、同時確率を求めること
• 推論の方法
– 厳密な推論 → 3.gRainによる厳密な推論(次スライド)
• 低速
• 推論結果が一意に定まる
– 近似推論 → 4.bnlearnによる近似推論(次々スライド)
• 高速
• 推論結果が実行毎に変わる
2017/1/7 パーティクルフィルタ研究会
𝑿 𝟐 =○ 𝑿 𝟐 =×
? ?
𝑃(𝑋2, 𝑋1 =○)
エビデンス
9/14
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
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
トラブルシューティング その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, … , 𝑌𝑛 = 𝑦 𝑛)原因=エビデンス結果
計算機で表せる
最小値を下回る
トラブルシューティング その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
おわりに
• 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

Contenu connexe

Tendances

階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
shima o
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
takehikoihayashi
 

Tendances (20)

階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 
階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門階層ベイズによるワンToワンマーケティング入門
階層ベイズによるワンToワンマーケティング入門
 
Rで因子分析 商用ソフトで実行できない因子分析のあれこれ
Rで因子分析 商用ソフトで実行できない因子分析のあれこれRで因子分析 商用ソフトで実行できない因子分析のあれこれ
Rで因子分析 商用ソフトで実行できない因子分析のあれこれ
 
階層ベイズと自由エネルギー
階層ベイズと自由エネルギー階層ベイズと自由エネルギー
階層ベイズと自由エネルギー
 
ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定ようやく分かった!最尤推定とベイズ推定
ようやく分かった!最尤推定とベイズ推定
 
変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)変分推論法(変分ベイズ法)(PRML第10章)
変分推論法(変分ベイズ法)(PRML第10章)
 
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
構造方程式モデルによる因果推論: 因果構造探索に関する最近の発展
 
pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話
 
[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編
[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編
[データマイニング+WEB勉強会][R勉強会] R言語によるクラスター分析 - 活用編
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM) 一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説PCAの最終形態GPLVMの解説
PCAの最終形態GPLVMの解説
 
これからの仮説検証・モデル評価
これからの仮説検証・モデル評価これからの仮説検証・モデル評価
これからの仮説検証・モデル評価
 
PRML輪読#1
PRML輪読#1PRML輪読#1
PRML輪読#1
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
 
ブースティング入門
ブースティング入門ブースティング入門
ブースティング入門
 
階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
 

Similaire à Rによるベイジアンネットワーク入門

ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門
Miyoshi Yuya
 

Similaire à Rによるベイジアンネットワーク入門 (12)

【Zansa】第12回勉強会 -PRMLからベイズの世界へ
【Zansa】第12回勉強会 -PRMLからベイズの世界へ【Zansa】第12回勉強会 -PRMLからベイズの世界へ
【Zansa】第12回勉強会 -PRMLからベイズの世界へ
 
Deep learning入門
Deep learning入門Deep learning入門
Deep learning入門
 
正則化による尤度比推定法を応用した多値分類器の改良
正則化による尤度比推定法を応用した多値分類器の改良正則化による尤度比推定法を応用した多値分類器の改良
正則化による尤度比推定法を応用した多値分類器の改良
 
Or学会用20160915.ver2
Or学会用20160915.ver2Or学会用20160915.ver2
Or学会用20160915.ver2
 
ベイズ統計入門
ベイズ統計入門ベイズ統計入門
ベイズ統計入門
 
ベイズ統計学
ベイズ統計学 ベイズ統計学
ベイズ統計学
 
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
 
PRML第9章「混合モデルとEM」
PRML第9章「混合モデルとEM」PRML第9章「混合モデルとEM」
PRML第9章「混合モデルとEM」
 
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
 
確率の基礎
確率の基礎確率の基礎
確率の基礎
 
[The Elements of Statistical Learning]Chapter8: Model Inferennce and Averaging
[The Elements of Statistical Learning]Chapter8: Model Inferennce and Averaging[The Elements of Statistical Learning]Chapter8: Model Inferennce and Averaging
[The Elements of Statistical Learning]Chapter8: Model Inferennce and Averaging
 
Oshasta em
Oshasta emOshasta em
Oshasta em
 

Plus de Okamoto Laboratory, The University of Electro-Communications

Plus de Okamoto Laboratory, The University of Electro-Communications (19)

クラウドソーシングにおける協調的な共同作業に対する組織構成システム
クラウドソーシングにおける協調的な共同作業に対する組織構成システムクラウドソーシングにおける協調的な共同作業に対する組織構成システム
クラウドソーシングにおける協調的な共同作業に対する組織構成システム
 
リンク予測に基づく共同研究者推薦システムの試作
リンク予測に基づく共同研究者推薦システムの試作リンク予測に基づく共同研究者推薦システムの試作
リンク予測に基づく共同研究者推薦システムの試作
 
Visualizing the Importance of Floor-Plan Image Features in Rent-Prediction Mo...
Visualizing the Importance of Floor-Plan Image Features in Rent-Prediction Mo...Visualizing the Importance of Floor-Plan Image Features in Rent-Prediction Mo...
Visualizing the Importance of Floor-Plan Image Features in Rent-Prediction Mo...
 
Directed Graph-based Researcher Recommendation by Random Walk with Restart an...
Directed Graph-based Researcher Recommendation by Random Walk with Restart an...Directed Graph-based Researcher Recommendation by Random Walk with Restart an...
Directed Graph-based Researcher Recommendation by Random Walk with Restart an...
 
間取り図を用いた賃料予測モデルに関する一検討
間取り図を用いた賃料予測モデルに関する一検討間取り図を用いた賃料予測モデルに関する一検討
間取り図を用いた賃料予測モデルに関する一検討
 
Development of a Collaborator Recommender System Based on Directed Graph Model
Development of a Collaborator Recommender System Based on Directed Graph ModelDevelopment of a Collaborator Recommender System Based on Directed Graph Model
Development of a Collaborator Recommender System Based on Directed Graph Model
 
Rent Prediction Models with Floor Plan Images
Rent Prediction Models with Floor Plan ImagesRent Prediction Models with Floor Plan Images
Rent Prediction Models with Floor Plan Images
 
分散表現を用いたリアルタイム学習型セッションベース推薦システム
分散表現を用いたリアルタイム学習型セッションベース推薦システム分散表現を用いたリアルタイム学習型セッションベース推薦システム
分散表現を用いたリアルタイム学習型セッションベース推薦システム
 
アイテム分散表現の階層化・集約演算に基づくセッションベース推薦システム
アイテム分散表現の階層化・集約演算に基づくセッションベース推薦システムアイテム分散表現の階層化・集約演算に基づくセッションベース推薦システム
アイテム分散表現の階層化・集約演算に基づくセッションベース推薦システム
 
発売日前のレビューとPU-Learningを用いた
スパムレビュー検出
発売日前のレビューとPU-Learningを用いた
スパムレビュー検出発売日前のレビューとPU-Learningを用いた
スパムレビュー検出
発売日前のレビューとPU-Learningを用いた
スパムレビュー検出
 
モデルベース協調フィルタリングにおける推薦の透明性に関する検討
モデルベース協調フィルタリングにおける推薦の透明性に関する検討モデルベース協調フィルタリングにおける推薦の透明性に関する検討
モデルベース協調フィルタリングにおける推薦の透明性に関する検討
 
重回帰分析による推薦の透明性を有したモデルベース協調フィルタリング
重回帰分析による推薦の透明性を有したモデルベース協調フィルタリング重回帰分析による推薦の透明性を有したモデルベース協調フィルタリング
重回帰分析による推薦の透明性を有したモデルベース協調フィルタリング
 
Word2Vecによる次元圧縮と重回帰分析型協調フィルタリングへの応用
Word2Vecによる次元圧縮と重回帰分析型協調フィルタリングへの応用Word2Vecによる次元圧縮と重回帰分析型協調フィルタリングへの応用
Word2Vecによる次元圧縮と重回帰分析型協調フィルタリングへの応用
 
数式からみるWord2Vec
数式からみるWord2Vec数式からみるWord2Vec
数式からみるWord2Vec
 
単語の分散表現の 購買履歴への応用
単語の分散表現の 購買履歴への応用単語の分散表現の 購買履歴への応用
単語の分散表現の 購買履歴への応用
 
機関リポジトリから収集した学術論文のテキスト解析に関する一検討
機関リポジトリから収集した学術論文のテキスト解析に関する一検討機関リポジトリから収集した学術論文のテキスト解析に関する一検討
機関リポジトリから収集した学術論文のテキスト解析に関する一検討
 
Text Analysis of Academic Papers Archived in Institutional Repositories
Text Analysis of Academic Papers Archived in Institutional RepositoriesText Analysis of Academic Papers Archived in Institutional Repositories
Text Analysis of Academic Papers Archived in Institutional Repositories
 
Families of Triangular Norm Based Kernel Function and Its Application to Kern...
Families of Triangular Norm Based Kernel Function and Its Application to Kern...Families of Triangular Norm Based Kernel Function and Its Application to Kern...
Families of Triangular Norm Based Kernel Function and Its Application to Kern...
 
これから始めるディープラーニング
これから始めるディープラーニングこれから始めるディープラーニング
これから始めるディープラーニング
 

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
  • 4. ベイジアンネットワークの応用例(併せ買いの推薦) • 併せ買いの確率としての同時確率 – 例:P( =○, =○) = 0.98 ⇒ パンとコーヒーは98%で一緒に買われる • 情報推薦としてのベイジアンネットワーク P( =○, =○)=0.98 P( =○, =○)=0.65 ⋮ max{P( =○,?=○)} 構造学習 ○ × ○ × ○ ○ ⋮ 2017/1/7 パーティクルフィルタ研究会 4/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
  • 6. 下準備 #bnleranとgRainのインストール(詳細はhttps://www.bioconductor.org) source("https://bioconductor.org/biocLite.R") biocLite(c("bnlearn", "gRain")) #ライブラリの読み込み library(bnlearn) library(gRain) #データセットの読み込み dataset = read.csv("./dataset.csv", header=T, row.names=T, colClasses="factor") id 確率変数𝑿 𝟏 確率変数𝑿 𝟐 確率変数𝑿 𝟑 ・・・ 1 ○ × ○ 2 × ○ ○ ⋮ ⋱ factor型で読む テーブル形式のデータ 2017/1/7 パーティクルフィルタ研究会 6/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
  • 8. 2. bn.fit関数による条件付確率表の作成 #条件付確率表(CPT:ConditionalProbabilityTable) の計算 fitted = bn.fit(res, dataset, method='bayes') 𝑃 𝑋2 𝑋1)𝑃(𝑋1) 𝑿 𝟏=〇 0.60 𝑿 𝟏=× 0.40 𝑿 𝟏=〇 𝑿 𝟏 =× 𝑿 𝟐=〇 0.60 0.45 𝑿 𝟐=× 0.40 0.55 id 𝑿 𝟏 𝑿 𝟐 𝑿 𝟑 ⋯ 1 ○ × ○ 2 × ○ ○ ⋮ ⋱ 数え上げる 𝑋1 𝑋2 2017/1/7 パーティクルフィルタ研究会 0頻度問題を回避 8/14
  • 9. 推論とその方法 • 推論とは – エビデンス(わかっていること)を与えて、同時確率を求めること • 推論の方法 – 厳密な推論 → 3.gRainによる厳密な推論(次スライド) • 低速 • 推論結果が一意に定まる – 近似推論 → 4.bnlearnによる近似推論(次々スライド) • 高速 • 推論結果が実行毎に変わる 2017/1/7 パーティクルフィルタ研究会 𝑿 𝟐 =○ 𝑿 𝟐 =× ? ? 𝑃(𝑋2, 𝑋1 =○) エビデンス 9/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