The Infer.NET Modelling API
When using Infer.NET, you first define a probabilistic model to work with. If you don't know what a probabilistic model is, or just need a refresher, take a look at Resources and References. The Modelling API (Application Programming Interface) allows you to create model variables and observations, and specify how these relate to each other. To use the modelling API, you must import the MicrosoftResearch.Infer.Models namespace.
Here is a simple example of using the modelling API to define a model for learning the mean and precision (inverse variance) of a Gaussian:
The factor graph for this model is shown below.
This example creates two random variables, mean and precision with Gaussian and Gamma priors. It also creates a constant array data; 'constant' here means that the values in this array will be compiled into the model and will not be changeable when we run the model. The range i ranges across the data indices from 0 to 3. The final line ties all of the above together by constraining the data points to be drawn from a Gaussian with mean mean and precision precision. Overall, this model provides a way to learn posterior distributions over the mean and precision of some data. To see how to run inference in this model, see running inference.
You can see from this example that the modelling API is accessed almost entirely through static methods on the Variable class. The following pages describe how various modelling tasks can be achieved using the modelling API:
- Creating variables
- Applying functions and operators to variables
- Attaching constraints to variables
- Working with arrays and ranges
- ForEach blocks
- Jagged arrays
- Indexing arrays by observed variables
- Branching on variables to create mixture models
- Repeat blocks
- Computing model evidence for model selection
Finally, note that the use of
Variable.Constant()is a convenience for the early stages of model development. For efficiency, scalability, and flexibility, it is preferable the Observed value mechanism as described in