Exemplo n.º 1
0
        public Matrix PredictProbability(Matrix input)
        {
            var jointLogLikelihood = new Vector[ClassPriors.Count()];

            for (int i = 0; i < ClassPriors.Count(); i++)
            {
                var kvp    = ClassPriors.ElementAt(i);
                var jointi = System.Math.Log(kvp.Value);
                var nij    = Sigma.GetRowVector(i).Multiply(System.Math.PI).Multiply(2.0).Log().Sum().GetNumber() * -0.5;
                var res    = input.Substract(Theta.GetRowVector(i)).Pow(2).Div(Sigma.GetRowVector(i)).SumAllRows().Multiply(-0.5).Sum(nij);
                jointLogLikelihood[i] = res.Sum(jointi);
            }

            Matrix jointLogLikelihoodMatrix = jointLogLikelihood;

            jointLogLikelihoodMatrix = jointLogLikelihoodMatrix.Transpose();
            var logProbX = jointLogLikelihoodMatrix.Logsumexp();

            return(jointLogLikelihoodMatrix.Substract(logProbX).Exp());
        }