| Safe Haskell | Safe-Infered |
|---|
Bayes.Examples.Sampling
Contents
Description
Example of sampling
Two samplers are availables : the discreteAncestralSampler and the gibbsSampler.
Only the gibbsSampler can be used with evidence.
In this example, we have a very simple network.
simple :: ([TDV Bool],SBN CPT)
simple = runBN $ do
a <- variable "a" (t :: Bool)
b <- variable "b" (t :: Bool)
--
proba a ~~ [0.4,0.6]
cpt b [a] ~~ [0.8,0.2,0.2,0.8]
--
return [a,b]
This network is representing a sensor b. We observe the value of b and we want to infer the value of a.
We use the gibbsSampler for this with an initial period of 200 samples which are dropped. The gibbsSampler is
generate a stream of samples. From this stream, we need to compute a probability distribution. For this, we use
the samplingHistograms histogram function which is generating a list : the probability values of each vertex.
let (vars@[a,b],exampleG) = simple
n <- runSampling 5000 200 (gibbsSampler exampleG [b =: True])
let h = samplingHistograms n
print $ h
Then, we compare this result with the exact one we get with a junction tree.
let jt = createJunctionTree nodeComparisonForTriangulation exampleG
jt' = changeEvidence [b =: True] jt
mapM_ (x -> print . posterior jt' $ [x]) vars
We can also use the discreteAncestralSampler to compute the posterior but it is not supporting the use of evidence in this
version. The syntax is similar.
n <- runSampling 500 (discreteAncestralSampler exampleG)
- testSampling :: IO ()
Test function
testSampling :: IO ()Source