locked
Newbie question: Extract mean and variance from a gaussian(mean, variance) RRS feed

  • Question

  • Goood Morning Infer.NET team and thanks for work on this wonderful library,

    As a newbie in Infer.net, working in VB.NET, i am trying to test bayesian inference.

    All is ok, i can create a w matrix, calculated with by this way:

    Dim y_observed As VariableArray(Of Double) = Variable.Observed(Variation, r).Named("y")
    Dim x_observed As VariableArray(Of Vector) = Variable.Observed(x, r).Named("x")

    ' Bayes Point Machine
    Dim noise As Double = 0.1
    y_observed(r) = Variable.GaussianFromMeanAndVariance(Variable.InnerProduct(w, x_observed(r)), noise)

    I "infer" my wposterior gaussian like that: Dim wPosterior As VectorGaussian = engine.Infer(Of VectorGaussian)(w)

    and i use it with a unique  "Out of the Sample" observation  yOTS(0) where:  

    Dim yOTS As VariableArray(Of Double) = Variable.Array(Of Double)(r2)

    yOTS(0) = Variable.GaussianFromMeanAndVariance(Variable.InnerProduct(Variable.Random(wPosterior), xOTS_observed(0)), noise)

    Finally i obtain my output, for exemple:

    "output=" & engine.Infer(yOTS).ToString => output=[0] Gaussian(0.00123, 0.1196)

    My problem is quite frustrating: i can t put mean (here 0.00123) and variance (0.1196) in variables ...

    I have tried moyenne = engine.Infer(yOTS).GetMean(), it should be straightforward but ... i have a bug, the error message says:

    "The public member 'GetMean' from type 'DistributionStrucArray(Of Gaussain, Double)' is not found' (Rough english translation from french error message).

    So, is there a simplier way to get the mean and variance, what have i to do to get these values?

    Thanks for help.

    Tuesday, June 19, 2012 8:49 AM

Answers

  • yOTS is a VariableArray, so its marginal comes out as IList<Gaussian>.

    IList<Gaussian> output = engine.Infer<IList<Gaussian>>(yOTS);
    Console.WriteLine(output[0].GetMean());

    • Marked as answer by TixuOty Thursday, June 21, 2012 9:03 AM
    Wednesday, June 20, 2012 4:30 PM
    Owner

All replies

  • yOTS is a VariableArray, so its marginal comes out as IList<Gaussian>.

    IList<Gaussian> output = engine.Infer<IList<Gaussian>>(yOTS);
    Console.WriteLine(output[0].GetMean());

    • Marked as answer by TixuOty Thursday, June 21, 2012 9:03 AM
    Wednesday, June 20, 2012 4:30 PM
    Owner
  • Thx a lot Tom, it works.

    it was as simple as that ...

    Let s go to predict now!

    See you later for another newbie question.

    Tixu.

    Thursday, June 21, 2012 9:04 AM