# Overview

Atlassian Sourcetree is a free Git and Mercurial client for Windows.

Atlassian Sourcetree is a free Git and Mercurial client for Mac.

# Infergo — Go programs that learn

`infergo`

is a probabilistic programming
facility for the Go language. `infergo`

allows to write probabilistic models in almost unrestricted Go
and relies on automatic
differentiation
for optimization and inference.

## Example

Learning parameters of the Normal distribution from observations.

### Model

type Model struct { Data []float64 } // x[0] is the mean, x[1] is the log stddev of the distribution func (m *Model) Observe(x []float64) float64 { // Our prior is a unit normal ... ll := Normal.Logps(0, 1, x...) // ... but the posterior is based on data observations. ll += Normal.Logps(x[0], math.Exp(x[1]), m.Data...) return ll }

### Inference

// Data m := &Model{[]float64{ -0.854, 1.067, -1.220, 0.818, -0.749, 0.805, 1.443, 1.069, 1.426, 0.308}} // Parameters mean, logs := 0., 0. x := []float64{mean, logs} // Optimiziation opt := &infer.Momentum{ Rate: 0.01, Decay: 0.998, } for iter := 0; iter != 1000; iter++ { opt.Step(m, x) } mean, logs := x[0], x[1] // Posterior hmc := &infer.HMC{ L: 10, Eps: 0.1, } samples := make(chan []float64) hmc.Sample(m, x, samples) for i := 0; i != 1000; i++ { x = <-samples } hmc.Stop()

## Acknowledgements

I owe a debt of gratitude to Frank
Wood who introduced me to
probabilistic programming and inspired me to pursue
probabilistic programming paradigms and applications. I also
want to thank Jan-Willem van de
Meent, with whom I had
fruitful discussions of motives, ideas, and implementation
choices behind `infergo`

, and whose thoughts and recommendations
significantly influenced `infergo`

design. Finally, I want to
thank PUB+, the company I work for, for
supporting me in development of `infergo`

and letting me
experiment with applying probabilistic programming to critical
decision-making in production environment.