ベイジアン・ ネットワーク

ベイジアン・
ネットワーク
ベイズの定理
• P(A) = 事象Aが発生する確率(事前確率)
• P(B|A) = 事象Aが起きた後での、事象Bの確率(事後
確率)
B
𝑃 𝐴, 𝐵 = 𝑃 𝐵 𝐴 𝑃 𝐴 = 𝑃 𝐴 𝐵 𝑃 𝐵
𝑃 𝐵𝐴 =
𝑃
𝐴𝐵
𝑃 𝐴
𝑃 𝐵
A
𝑃 𝐵𝐴
ベイズの定理
確率変数の取る値が2値である場合(真偽,
Yes/Noなど)は次式となる.
𝐴 = 𝐴, 𝐴 , 𝐵 = {𝐵, 𝐵}
𝐴 :Aの否定
𝑃 𝐴𝐵
𝑃 𝐵𝐴 =
𝑃(𝐵)
𝑃 𝐴
=
𝑃
𝑃
𝐴𝐵
𝐴𝐵
𝑃 𝐵 +𝑃
𝐴𝐵
𝑃 𝐵
𝑃 𝐵
ベイズの定理
確率変数の値が複数,つまり
𝐴 = 𝐴1 , 𝐴2 , ⋯ , 𝐴𝑀
𝐵 = 𝐵1 , 𝐵2 , ⋯ , 𝐵𝑁
の場合は次式となる.
𝑃 𝐴𝑗 𝐵𝑖
𝑃 𝐵𝑖 𝐴𝑗 =
𝑃(𝐵𝑖 )
𝑃 𝐴𝑗
=
𝐴𝑗 𝐵𝑖
𝐴𝑗 𝐵𝑘 𝑃
𝑃
𝑘𝑃
𝐵𝑘
𝑃 𝐵𝑖
例題1
臨床検査における偽陽性検査
• 検査精度
– 病気である患者を「陽性」と判定する確率が99%
– 病気でない患者を「陰性」と判定する確率95%
(「陽性」と判定する確率5%)
• 患者が病気である確率0.1%
• 偽陽性(陰性だ(病気でない)が陽性と判断さ
れた状態)である確率を求める.
練習問題1
臨床検査における偽陽性検査
• A:患者が病気である確率
• B:検査結果が陽性である確率
𝑃 𝐵𝐴 𝑃 𝐴
𝑃 𝐴𝐵 =
𝑃 𝐵
𝑃 𝐵𝐴 𝑃 𝐴
=
𝑃 𝐵 𝐴 𝑃 𝐴 +𝑃 𝐵 𝐴 𝑃 𝐴
0.99 × 0.001
=
0.99 × 0.001 + 0.05 × 0.999
= 0.019 =
偽陽性=1-0.019 = 0.981
演習問題1
スパムメール
• メールフォルダにあるメールのうち,60%がスパムである.
• 60%のスパムメールのうち
– 80%が単語”buy”を含んでいる.
– 20%が単語”buy”を含んでいない.
• 40%の非スパムメールのうち
– 10%が単語”buy”を含んでいる.
– 90%が単語”buy”を含んでいない.
• このとき,新たなメールが単語”buy”を含んでいるときに,
そのメールがスパムである確率はどのように推定できるか.
ベイジアンネットワーク
ベイジアンネットワーク
• 概要
– ベイジアンネットワークとは確率変数間の依存関
係を非循環有向グラフで表現するモデルである.
– 確率変数をノードで表し,変数間の因果関係をリ
ンクで表す.
– 確率変数の非線形関係式を定義し,不確実性を
うまく扱うことができる.
9
どういう用途に用いるか?
Q) 食事がしたい!
カップル
イタリアン,
フレンチ
家族
子供が騒いでも良さ
そうなファミリーレストラン
時間
人数
場所
費用
食事
食事={ファミレス,フレンチ,ラーメン}
時間={朝,昼,夜}
・・・
練習問題2
盗難(された)車
NO
盗難
色
車種
国産・輸入
1
Yes
赤
スポーツ
国産
2
No
赤
スポーツ
国産
3
Yes
赤
スポーツ
国産
4
No
黄
スポーツ
国産
5
Yes
黄
スポーツ
輸入
6
No
黄
SUV
輸入
7
Yes
黄
SUV
輸入
8
No
黄
SUV
国産
9
No
赤
SUV
輸入
10
Yes
赤
スポーツ
輸入
ベイジアンネットワークを作成し,赤い国産SUVの盗難を推定する.
練習問題2(1)
state <- c("Y", "N", "Y", "N", "Y", "N", "Y", "N", "N", "Y" )
col <- c("R", "R", "R", Y", "Y", "Y", "Y", "Y", "R", "R")
type <- c("Sport", "Sport", "Sport", "Sport", "Sport", "SUV", "SUV", "SUV", "SUV", "Sport" )
import <- c("N", "N", "N", "N", "Y", "Y", "Y", "N", "Y", "Y")
data.bn <- data.frame(state, col, type, import)
*データの準備
install.packages("deal", dependencies = TRUE)
*パッケージのインストール
Installing package into ‘C:/Users/kita/Documents/R/win-library/3.3’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.3/deal_1.2-37.zip'
Content type 'application/zip' length 189773 bytes (185 KB)
downloaded 185 KB
package ‘deal’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:¥Users¥kita¥AppData¥Local¥Temp¥RtmpsnpJei¥downloaded_packages
練習問題2(2)
library(deal)
*パッケージをロード
Warning message:
パッケージ ‘deal’ はバージョン
3.3.2 の R の下で造られました
net.pre.bn <- network(data.bn)
plot(net.pre.bn)
*ノードのみのネットワークの作成
と表示
練習問題2(3)
ht.prior <- jointprior(net.pre.bn)
*事前確率分布の計算
Imaginary sample size: 32
update <- learn(net.pre.bn, data.bn, ht.prior)
net.post.bn <- autosearch(getnetwork(update), data.bn,
ht.prior, trace=FALSE)
[Autosearch (1) -28.16808 [state|type][col][type][import]
(2) -28.10776 [state|type][col|type][type][import]
(3) -28.04743 [state|type][col|type][type][import|type]
Total 0.05 add 0.03 rem 0.02 turn 0 sort 0 choose 0 rest 0 ]
plot(getnetwork(net.post.bn))
*事後確率とネットワークの探索
ナイーブ(単純)ベイズ推定器


確率変数,確率変数間の条件付依存関係,その条
件付確率によって定義される.
ネットワークが,親ノードと子ノードの間の1段からな
る.
𝐵
子ノード(結果)
Naïve ベイズ
𝐴1
𝐴2
・・・・・
𝐴𝑀
親ノード(原因)
ナイーブ(単純)ベイズ推定器
𝑃(𝐴1 , 𝐴2 , ⋯ , 𝐴𝑀 , 𝐵)
= 𝑃 𝐵 𝐴1 , 𝐴2 , ⋯ , 𝐴𝑀 𝑃 𝐴1 , 𝐴2 , ⋯ , 𝐴𝑀
= 𝑃 𝐴1 , 𝐴2 , ⋯ , 𝐴𝑀 𝐵 𝑃 𝐵
𝑃 𝐴1 , 𝐴2 , ⋯ , 𝐴𝑀 𝐵
𝑃 𝐵 𝐴1 , 𝐴2 , ⋯ , 𝐴𝑀 =
𝑃 𝐵
𝑃 𝐴1 ,𝐴2 ,⋯,𝐴𝑀
𝐵
𝐴1
𝐴2
・・・
𝐴𝑀
練習問題3(1)
install.packages("e1071", dependencies = TRUE)
*パッケージのインストール
Installing package into ‘C:/Users/kita/Documents/R/win-library/3.3’
(as ‘lib’ is unspecified)
also installing the dependencies ‘mlbench’, ‘randomForest’, ‘xtable’
…..
library(e1071)
*パッケージのロード
Warning message:
パッケージ ‘e1071’ はバージョン 3.3.2 の R の下で造られました
練習問題3(2)
predict.bn <- naiveBayes(state~., data=data.bn)
*単純ベイズ予測式を作成
col <- c("R")
type <- c("SUV")
import <- c("N")
data.bn2 <- data.frame(col,type,import)
*予測したいデータを作成
pred.res.bn <- predict(predict.bn, data.bn2)
*予測結果を求める
pred.res.bn
*結果を表示する
[1] Y
Levels: N Y
演習問題2
• 以下の情報についてベイジアンネットワークを作成する.
• 天候が晴れ,気温が寒く,湿度が高いときにテニスをする
確率を求めよ.
天気
晴れ
晴れ
曇り
雨
雨
雨
曇り
晴れ
晴れ
雨
晴れ
曇り
曇り
雨
気温
暑い
暑い
暑い
温暖
寒い
寒い
寒い
温暖
寒い
温暖
温暖
温暖
暑い
温暖
湿度
高い
高い
高い
高い
普通
普通
普通
高い
普通
普通
普通
高い
普通
高い
テニス
しない
しない
する
する
する
しない
する
しない
する
する
する
する
する
しない