Variable types and their distributions

The following table shows what types of variables are supported by Infer.NET, along with the distributions which are available for representing uncertainty in each type. You can create variables for each of these types using the static methods on Variable for each distribution. Some distributions with experimental quality band are not shown in this table.

Variable type
Restrictions
Distribution
Distribution Class   Example of use
bool
- Bernoulli Two coins tutorial
double - Gaussian Learning a Gaussian tutorial
double
between 0 and infinity
Gamma Learning a Gaussian tutorial
double between 0 and 1 Beta Beta Clinical trial tutorial
double between settable lower
and upper bounds
TruncatedGaussian -
double between 0 and settable period length Wrapped Gaussian WrappedGaussian -
double between a lower bound and infinity Pareto Pareto -
int
between 0 and D-1 inclusive
Discrete (categorical)
Discrete Latent Dirichlet Allocation
int between 0 and infinity Poisson -
int between 0 and N inclusive Binomial Binomial -
enum - Discrete over enum values DiscreteEnum -
Vector - VectorGaussian Mixture of Gaussians tutorial
Vector each element between 0 and 1,
elements sum to 1
Dirichlet Latent Dirichlet Allocation
PositiveDefiniteMatrix
matrix is positive definite Wishart Mixture of Gaussians tutorial
string - Probabilistic automaton StringDistribution Hello, Strings!
char - Discrete over char values DiscreteChar -
TDomain[]
T is a value-type distribution
over a domain TDomain
Array of distributions considered as
a distribution over an array
DistributionStructArray
<T, TDomain>
-
TDomain[,] T is a value-type distribution
over a domain TDomain
2-D Array of distributions considered as
a distribution over a 2-D array
DistributionStructArray2D
<T, TDomain>
-
TDomain[]
T is a reference-type distribution
over a domain TDomain
Array of distributions considered as
a distribution over an array
DistributionRefArray
<T, TDomain>
-
TDomain[,] T is a reference-type distribution
over a domain TDomain
2-D Array of distributions considered as
a distribution over a 2-D array
DistributionRefArray2D
<T, TDomain>
-
ISparseList<bool> - Sparse list of Bernoulli distributions
considered as a distribution over a
sparse list of bools
SparseBernoulliList -
ISparseList<double> elements between 0 and 1 Sparse list of Beta distributions
considered as a distribution over a
sparse list of doubles
SparseBetaList -
ISparseList<double> - Sparse list of Gaussian distributions
considered as a distribution over a
sparse list of double
s
SparseGaussianList -
ISparseList<double> elements between 0 and infinity Sparse list of Gamma distributions
considered as a distribution over a
sparse list of double
s
SparseGammaList -
IList<int> elements between 0 and N-1 inclusive SparseBernoulliList where domain is
list of indices with value true
BernoulliIntegerSubset -
IFunction
- SparseGP Gaussian process classifier
 
Notes:
  • For descriptions of the Vector and PositiveDefiniteMatrix see the page on Vector and Matrix types.
  • DistributionRefArray<T, TDomain> can be used to represent a distribution over an arbitrarily deep jagged array domain. For example, the following alias (which can be copied and pasted into you code) represents a 2-deep array of Gaussians considered as a distribution over a 2-deep jagged array of double:
  • using GaussianArrayArray = DistributionRefArray<DistributionStructArray<Gaussian, double>, double[]>;
  • Posterior distributions for array variables can be passed back as either .NET arrays of distributions (for example Gaussian[][]), or as distribution arrays (for example GaussianArrayArray using the above alias). The former can be achieved by using (for example) Gaussian[][] as the type parameter in the Infer method. The latter is the native format which is therefore is more efficient and needs no casting or type parameter. 
  • IFunction is an interface type which is used as the domain type for a SparseGP distribution.  This interface has a single Evaluate method for a Vector domain:
    double Evaluate(Vector v);
©2009-2014 Microsoft Corporation. All rights reserved.  Terms of Use | Trademarks | Privacy Statement