Bayesian network for rain predictions
Code: "bayes_rain.py". Programming language: Python DMelt Version 1. Last modified: 10/28/2015. License: Pro
https://datamelt.org/code/cache/bayes_rain_6702.py
To run this script using the DMelt IDE, copy the above URL link to the menu [File]→[Read script from URL] of the DMelt IDE.


# this example answers "What is the probability that it is raining, given the grass is wet?"
# See wikipedia: https://en.wikipedia.org/wiki/Bayesian_network
# S.Chekanov

from bayesnet.jayes import BayesNode,BayesNet
from bayesnet.jayes.inference.jtree import JunctionTreeAlgorithm
from java.util import *

net=BayesNet()

a=net.createNode("weather")   # node=1 
a.addOutcomes("rain", "suny")
a.setProbabilities(0.2, 0.8)  # P(rain)=0.2 

b=net.createNode("sprinkler") # node=2 
b.addOutcomes("on", "off")
b.setParents(Arrays.asList(a))
b.setProbabilities(
#  on  | off
  0.01, 0.99, # weather=rain 
  0.4,   0.6) # weather=suny 

c=net.createNode("grass")      # node=3 
c.addOutcomes("wet", "dry")
c.setParents(Arrays.asList(a, b))
c.setProbabilities(
  # wet |  dry
  # weather=rain 
  0.99,    0.01,  # sprinkler=on 
  0.8,      0.2,  # sprinkler=off
  # weather=suny  
  0.9,      0.1,  # sprinkler=on
  0.0,      1.0)  # sprinkler=off
inferer=JunctionTreeAlgorithm()
inferer.setNetwork(net)
evidence=HashMap()
evidence.put(c, "wet") # grass is wet 
inferer.setEvidence(evidence)
beliefsC = inferer.getBeliefs(a)  
print "P(weather | grass=wet)=",beliefsC.tolist()


evidence=HashMap()
evidence.put(a, "rain")
evidence.put(c, "wet")
inferer.setEvidence(evidence)
beliefsC = inferer.getBeliefs(b)
print "P(sprinkler | weather=rain, grass=wet)=",beliefsC.tolist()

Ads help maintain this website.