Path: blob/master/notebooks/book1/03/sprinkler_pgm.ipynb
1193 views
Kernel: Python [conda env:py37]
Directed graphical models
We illustrate some basic properties of DGMs.
In [1]:
Make the model
In [2]:
Draw the model
In [3]:
In [4]:
Out[4]:
graphviz.graphs.Digraph
In [5]:
Out[5]:
In [6]:
Out[6]:
'Digraph.gv.pdf'
Display the factorization
In [7]:
Out[7]:
P(cloudy)P(rain|cloudy)P(sprinkler|cloudy)P(wet|rain,sprinkler)P(slippery|wet)
D-separation
In [8]:
Out[8]:
True
Extract CI relationships
In [9]:
Out[9]:
[('wet', 'cloudy', {'sprinkler', 'rain'}), ('wet', 'cloudy', {'slippery', 'sprinkler', 'rain'}), ('slippery', 'sprinkler', {'wet'}), ('slippery', 'sprinkler', {'wet', 'cloudy'}), ('slippery', 'sprinkler', {'wet', 'rain'}), ('slippery', 'sprinkler', {'wet', 'cloudy', 'rain'}), ('slippery', 'rain', {'wet'}), ('slippery', 'rain', {'wet', 'cloudy'}), ('slippery', 'rain', {'wet', 'sprinkler'}), ('slippery', 'rain', {'wet', 'cloudy', 'sprinkler'}), ('slippery', 'cloudy', {'wet'}), ('slippery', 'cloudy', {'wet', 'sprinkler'}), ('slippery', 'cloudy', {'wet', 'rain'}), ('slippery', 'cloudy', {'sprinkler', 'rain'}), ('slippery', 'cloudy', {'wet', 'sprinkler', 'rain'}), ('sprinkler', 'rain', {'cloudy'})]
In [10]:
Out[10]:
[('wet', 'cloudy', 'sprinkler, rain'), ('wet', 'cloudy', 'slippery, sprinkler, rain'), ('slippery', 'sprinkler', 'wet'), ('slippery', 'sprinkler', 'wet, cloudy'), ('slippery', 'sprinkler', 'wet, rain'), ('slippery', 'sprinkler', 'wet, cloudy, rain'), ('slippery', 'rain', 'wet'), ('slippery', 'rain', 'wet, cloudy'), ('slippery', 'rain', 'wet, sprinkler'), ('slippery', 'rain', 'wet, cloudy, sprinkler'), ('slippery', 'cloudy', 'wet'), ('slippery', 'cloudy', 'wet, sprinkler'), ('slippery', 'cloudy', 'wet, rain'), ('slippery', 'cloudy', 'sprinkler, rain'), ('slippery', 'cloudy', 'wet, sprinkler, rain'), ('sprinkler', 'rain', 'cloudy')]
In [11]:
Out[11]:
\begin{tabular}{lll}
\toprule
X & Y & Z \\
\midrule
wet & cloudy & sprinkler, rain \\
wet & cloudy & slippery, sprinkler, rain \\
slippery & sprinkler & wet \\
slippery & sprinkler & wet, cloudy \\
slippery & sprinkler & wet, rain \\
slippery & sprinkler & wet, cloudy, rain \\
slippery & rain & wet \\
slippery & rain & wet, cloudy \\
slippery & rain & wet, sprinkler \\
slippery & rain & wet, cloudy, sprinkler \\
slippery & cloudy & wet \\
slippery & cloudy & wet, sprinkler \\
slippery & cloudy & wet, rain \\
slippery & cloudy & sprinkler, rain \\
slippery & cloudy & wet, sprinkler, rain \\
sprinkler & rain & cloudy \\
\bottomrule
\end{tabular}
Parameterize the model
In [12]:
Out[12]:
/root/miniconda3/envs/py37/lib/python3.7/site-packages/pgmpy/models/BayesianModel.py:10: FutureWarning: BayesianModel has been renamed to BayesianNetwork. Please use BayesianNetwork class, BayesianModel will be removed in future.
FutureWarning,
True
Inference
In [13]:
Out[13]:
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
p(R=1) = 0.5
0%| | 0/2 [00:00<?, ?it/s]
0%| | 0/2 [00:00<?, ?it/s]
p(R=1|W=1) = 0.7079276773296245
0%| | 0/1 [00:00<?, ?it/s]
0%| | 0/1 [00:00<?, ?it/s]
p(R=1|W=1,S=1) = 0.32038834951456313