Safe Haskell | None |
---|---|
Language | Haskell2010 |
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