infergo v1.2.2
Infergo v1.2.2 is out.
Infergo has been made to work with Go 1.25. Accompanying repositories (infergo-studies, gogp) have been updated to depend on this version.
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. Works anywhere where Go does.
Hosted on Bitbucket.
Licensed under the MIT license.
Learning parameters of the Normal distribution from observations:
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
}// 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}
// Optimization
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{
Eps: 0.1,
}
samples := make(chan []float64)
hmc.Sample(m, x, samples)
for i := 0; i != 1000; i++ {
x = <-samples
}
hmc.Stop()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 worked for during early
stages of development of Infergo, for
supporting me in development of Infergo and letting me
experiment with applying probabilistic programming to critical
decision-making in production environment.
Infergo v1.2.2 is out.
Infergo has been made to work with Go 1.25. Accompanying repositories (infergo-studies, gogp) have been updated to depend on this version.
GoGP v1.0.1 is out. This is the first stable (v1) release of GoGP, a library for Gaussian process regression. GoGP has been used in production for over a year, and has undergone many changes improving performance and robustness.
Infergo v1.0.1 is out.
This is the first stable (v1) release of Infergo. Infergo has undergone many changes during the past year, and has been used in production for mission-critical computations in the cloud.
GoGP is out. GoGP is a library for Gaussian process regression in Go and uses Infergo for automatic differentiation and inference.
Infergo v0.7.0 is out.
This release is a result of improving and extending Infergo along with development of GoGP, a library for Gaussian process regression.
What’s new:
Gradient() method, instead of through automatic
differentation.Infergo v0.6.1 is out.
What’s new:
infergo v0.5.0 is out.
What’s new:
2.16 And the LORD God commanded the man, saying: ‘Of every tree of the garden thou mayest freely eat;
2.17 but of the tree of the knowledge of good and evil, thou shalt not eat of it; for in the day that thou eatest thereof thou shalt surely die.’
The Book of Genesis
Go gives the programmer introspection into every aspect of the language, and of a running program. But to one thing the programmer does not have access, and it is the goroutine identifier. Because the day the programmers know the goroutine identifier, they create goroutine-local storage through shared access and mutexes, and shall surely die.
infergo v0.3.0 is out.
What’s new:
infergo models can be optimized using Gonum optimization
algorithms. This includes
BFGS and variants. Case study
lr-gonum
applies L-BFGS to linear regression.infergo models and inference into WebAssembly and running in
the browser;infergo v0.2.2 is out.
What’s new: