Comments
Description
Transcript
ベイジアン・ ネットワーク
ベイジアン・ ネットワーク ベイズの定理 • 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 • 以下の情報についてベイジアンネットワークを作成する. • 天候が晴れ,気温が寒く,湿度が高いときにテニスをする 確率を求めよ. 天気 晴れ 晴れ 曇り 雨 雨 雨 曇り 晴れ 晴れ 雨 晴れ 曇り 曇り 雨 気温 暑い 暑い 暑い 温暖 寒い 寒い 寒い 温暖 寒い 温暖 温暖 温暖 暑い 温暖 湿度 高い 高い 高い 高い 普通 普通 普通 高い 普通 普通 普通 高い 普通 高い テニス しない しない する する する しない する しない する する する する する しない