hbayes-0.1: Inference with Discrete Bayesian Networks

Safe HaskellSafe-Infered



Examples of networks

Creating a simple network

The example function is the typical example. It is using the monad BNMonad. The goal of this monad is to offer a way of describing the network which is natural.

There are only three functions to understand inside the monad:

  • variable to create a discrete variable of type DV. Creating a discrete variable is using a Bounded and Enum type like for instance Bool.
  • proba to define the probability P(A) of a variable A
  • cpt to define the conditional probability table P(A | BC)

It is important to understand how the values are organized. If you define P( wet | sprinkler road) then you have to give the values in the order:

wet=False, sprinkler=False, road=False
wet=False, sprinkler=False, road=True
wet=False, sprinkler=True, road=False
wet=False, sprinkler=True, road=True

Finally, don't forget to return the discrete variables at the end of your network construction because those variables are used for making inferences.

example :: (DVSet,SBN CPT)
example = runBN $ do 
    winter <- variable "winter" (t :: Bool)
    sprinkler <- variable "sprinkler" (t :: Bool) 
    wet <- variable "wet grass" (t :: Bool) 
    rain <- variable "rain" (t :: Bool) 
    road <- variable "slippery road" (t :: Bool) 
    proba winter ~~ [0.4,0.6]
    cpt sprinkler [winter] ~~ [0.25,0.8,0.75,0.2]
    cpt rain [winter] ~~ [0.9,0.2,0.1,0.8]
    cpt wet [sprinkler,rain] ~~ [1,0.2,0.1,0.05,0,0.8,0.9,0.95]
    cpt road [rain] ~~ [1,0.3,0,0.7]
    return [winter,sprinkler,rain,wet,road]

Importing a network from a Hugin file

The exampleImport function can be used to import a file in Hugin format. Only a subset of the format is supported. The function will return a mapping from node names to Discrete Variables DV. The node name is used and not the node's label. The function is also returning a simple bayesian network SBN using CPT as factors.

The implementation is using getDataFileName to find the path of the test pattern installed by cabal.

exampleImport :: IO (Map.Map String DV,SBN CPT)
exampleImport = do 
    path <- getDataFileName "cancer.net"
    r <- importBayesianGraph path
    return (runBN $ fromJust r)



example :: (DVSet, SBN CPT)Source

Standard example found in many books about Bayesian Networks.

exampleImport :: IO (Map String DV, SBN CPT)Source

Example showing how to import a graph described into a Hugin file.

exampleDiabete :: IO (Map String DV, SBN CPT)Source

Diabete example (not provided with this package)

exampleAsia :: IO (Map String DV, SBN CPT)Source

Asia example (not provided with this package)

examplePoker :: IO (Map String DV, SBN CPT)Source

Poker example (not provided with this package)

exampleFarm :: IO (Map String DV, SBN CPT)Source

Farm example (not provided with this package)

examplePerso :: IO (Map String DV, SBN CPT)Source

Perso example (not provided with this package)