ベイジアン・ ネットワークベイジアンネットワーク •概要...
TRANSCRIPT
ベイジアン・ネットワーク
ベイズの定理
• P(A) = 事象Aが発生する確率(事前確率)
• P(B|A) = 事象Aが起きた後での、事象Bの確率(事後確率)
𝑃 𝐴, 𝐵 = 𝑃 𝐵 𝐴 𝑃 𝐴 = 𝑃 𝐴 𝐵 𝑃 𝐵
𝑃 𝐵 𝐴 =𝑃 𝐴 𝐵𝑃 𝐴
𝑃 𝐵A
B
𝑃 𝐵 𝐴
ベイズの定理
確率変数の取る値が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 inC:¥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段からなる.
𝐵
𝐴1 𝐴2 𝐴𝑀・・・・・
子ノード(結果)
親ノード(原因)
Naïve ベイズ
ナイーブ(単純)ベイズ推定器
𝑃(𝐴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] YLevels: N Y
演習問題2
• 以下の情報についてベイジアンネットワークを作成する.
• 天候が晴れ,気温が寒く,湿度が高いときにテニスをする確率を求めよ.
天気 気温 湿度 テニス晴れ 暑い 高い しない晴れ 暑い 高い しない
曇り 暑い 高い する雨 温暖 高い する
雨 寒い 普通 する雨 寒い 普通 しない
曇り 寒い 普通 する晴れ 温暖 高い しない晴れ 寒い 普通 する雨 温暖 普通 する晴れ 温暖 普通 する
曇り 温暖 高い する曇り 暑い 普通 する
雨 温暖 高い しない