コード例 #1
0
        public static double LogProb(this Mixture <VectorGaussian> mixture, MicrosoftResearch.Infer.Maths.Vector what)
        {
            double sum = 0;

            for (int i = 0; i < mixture.Components.Count; ++i)
            {
                MicrosoftResearch.Infer.Maths.Vector mean = mixture.Components[i].GetMean();
                MicrosoftResearch.Infer.Maths.Vector diff = what - mean;
                PositiveDefiniteMatrix precision          = mixture.Components[i].Precision;

                double prob =
                    Math.Exp(-0.5 * precision.QuadraticForm(diff, diff)) * Math.Sqrt(precision.Determinant()) / Math.Pow(2 * Math.PI, what.Count * 0.5);

                sum += mixture.Weights[i] * prob;
            }
            sum /= mixture.WeightSum();
            return(MathHelper.LogInf(sum));
        }