通道:用法示例

时间:2012-03-20 10:56:44

标签: statistics machine-learning bayesian-networks

是否有人使用了Passage,PArallel SAmpler GEnerator?

对我来说可能是非常有用的,但我发现的唯一文档是Github上的三行README(https://github.com/cscherrer/passage),以及Hackage上的简洁API。

如何运行它的一个简单示例将是很棒的!

1 个答案:

答案 0 :(得分:2)

在较高的层面上,Passage有两个重要的monad:BayesianNetworkBayesianSimulator

首先,您在BayesianNetwork monad中构建模型:

myModel :: Int -> BayesianNetwork (Node, Node, [Node])
myModel n = do
  mu <- normal 0 0.001
  tau <- improperScale
  xs <- replicateM n $ normal mu tau
  return (mu, tau, xs)

这被指定为生成模型,因此任何非随机的(这里是数据点n的数量)必须作为参数传递。或者,我们可以在n上发布分发。

接下来,我们构建一个调用模型的模拟器:

mySim :: [Double] -> BayesianSimulator ()
mySim xs0 = do
  setThreadNum 4
  let n = length xs0
  (mu, tau, xs) <- model $ myModel n
  forM (zip xs xs0) $ \(x, x0) -> observe x x0
  monitor mu
  monitor tau

最后,取一些数据:

xs0 = [1, -1, 2, 2, 2, -2]

并运行simluator:

main = genSimulator "myExample" (mySim xs0)

这将为采样器创建一个带有OpenMP代码的新目录myExample