private double CalculateZExpectationsScaled()
        {
            CalculatePredScaled();
            var residuals  = ArrayMath.Pow(dys - predY, 2.0);
            var residuals1 = residuals / (-2 * dsds[0] * dsds[0]);
            //Console.WriteLine(residuals);
            var residuals2 = residuals / (-2 * dsds[1] * dsds[1]);
            //Console.WriteLine(dsds[1]);
            var weights = dpAs.ElementDivide(dsds);
            var t1      = weights[0] * ArrayMath.Exp(residuals1);
            var t2      = weights[1] * ArrayMath.Exp(residuals2);
            var l       = t1.Zip(t2, (x, y) => (x + y));
            var ll      = l.Select(x => Math.Log(x)).Sum();
            var denom   = t1 + t2;

            t1 = t1.ElementDivide(denom);
            t2 = t2.ElementDivide(denom);
            for (int i = 0; i < ys.Length; i++)
            {
                zs[i, 0] = t1[i];
                zs[i, 1] = t2[i];
            }
            //return the log likelihood
            return(ll);
        }
 public virtual double[] GetConditionalDistribution(int[] sequence, int position)
 {
     double[] probs = ScoresOf(sequence, position);
     ArrayMath.LogNormalize(probs);
     probs = ArrayMath.Exp(probs);
     //System.out.println(this);
     return(probs);
 }
        public virtual void TestExpLog()
        {
            double[] d1prime = ArrayMath.Log(ArrayMath.Exp(d1));
            double[] diff    = ArrayMath.PairwiseSubtract(d1, d1prime);
            double   norm2   = ArrayMath.Norm(diff);

            NUnit.Framework.Assert.AreEqual(norm2, 1e-5, 0.0);
        }
Exemplo n.º 4
0
 // SEQUENCE MODEL METHODS
 /// <summary>
 /// Computes the distribution over values of the element at position pos in the
 /// sequence, conditioned on the values of the elements in all other positions
 /// of the provided sequence.
 /// </summary>
 /// <param name="sequence">the sequence containing the rest of the values to condition on</param>
 /// <param name="position">the position of the element to give a distribution for</param>
 /// <returns>
 /// an array of type double, representing a probability distribution;
 /// sums to 1.0
 /// </returns>
 public virtual double[] GetConditionalDistribution(int[] sequence, int position)
 {
     double[] result = ScoresOf(sequence, position);
     ArrayMath.LogNormalize(result);
     // System.out.println("marginal:          " + ArrayMath.toString(marginal,
     // nf));
     // System.out.println("conditional:       " + ArrayMath.toString(result,
     // nf));
     result = ArrayMath.Exp(result);
     // System.out.println("conditional:       " + ArrayMath.toString(result,
     // nf));
     return(result);
 }
        //The E Step
        private double CalculateZExpectations()
        {
            //OLDER VALIDATION CODE
            //Console.WriteLine(InitialPopSize);
            //Console.WriteLine(GrowthRate);
            //int n = xs.Length;
            //double[] residualsaa = (xs.Zip(ys, (x,y)=>Math.Pow((y-InitialPopSize*Math.Exp(x*GrowthRate)),2.0)).ToArray());
            //double var1 = -2 * sds[0] * sds[0];
            //double var2 = -2 * sds[1] * sds[1];
            //var residuals1a = residualsaa.Select(x =>x/ var1).ToArray();
            //var residuals2a = residualsaa.Select(x => x / var2).ToArray();
            //double w1 = Passignments[0] / sds[0];
            //double w2 = Passignments[1] / sds[1];
            //double loglik=0;
            //for (int i = 0; i < n; i++)
            //{
            //    loglik += Math.Log(w1 * Math.Exp(residuals1a[i]) + w2 * Math.Exp(residuals2a[i]));
            //}

            CalculatePred();
            var residuals  = ArrayMath.Pow(dys - predY, 2.0);
            var residuals1 = residuals / (-2 * dsds[0] * dsds[0]);
            //Console.WriteLine(residuals);
            var residuals2 = residuals / (-2 * dsds[1] * dsds[1]);
            //Console.WriteLine(dsds[1]);
            var weights = dpAs.ElementDivide(dsds);
            var t1      = weights[0] * ArrayMath.Exp(residuals1);
            var t2      = weights[1] * ArrayMath.Exp(residuals2);
            var l       = t1.Zip(t2, (x, y) => (x + y));
            var ll      = l.Select(x => Math.Log(x)).Sum();
            var denom   = t1 + t2;

            t1 = t1.ElementDivide(denom);
            t2 = t2.ElementDivide(denom);
            for (int i = 0; i < ys.Length; i++)
            {
                zs[i, 0] = t1[i];
                zs[i, 1] = t2[i];
            }
            //return the log likelihood
            return(ll);
        }
        //private double GetDerivativesLBFGS(Vector value, ref Vector grad)
        //{
        //    double A = value[(int)ParametersIndex.P0Index];
        //    double r = value[(int)ParametersIndex.rIndex];
        //    //First the R Gradient
        //    double rGradient = 0.0;
        //    double AGradient = 0.0;
        //    double ss = 0.0;
        //    for (int i = 0; i < xs.Length; i++)
        //    {
        //        for (int j = 0; j < 2; j++)
        //        {
        //            double cy = ys[i];
        //            double cx = xs[i];
        //            double cz = zs[i, j];
        //            double csd = sds[j];
        //            double cvd = Math.Pow(csd, 2.0);
        //            double ercx = Math.Exp(r * cx);
        //            //ss += -cz*(Math.Log(Passignments[j])-Math.Log(csd)-.5*Math.Pow(cy - A * ercx, 2)/(2*cvd));
        //            ss += cz * Math.Pow(cy - A * ercx, 2) / (2 * cvd);

        //            rGradient += (-cz * (cy - A * ercx) * A * cx * ercx) / cvd;
        //            AGradient += (-cz * (cy - A * ercx) * ercx) / cvd;
        //        }
        //    }
        //    grad[(int)ParametersIndex.P0Index] = AGradient;
        //    grad[(int)ParametersIndex.rIndex] = rGradient;
        //   // Qualities.Add(ss);
        //    //var b = grad.ToList();
        //   // b.ForEach(x => Math.Pow(x, 2));
        //   // Gradients.Add(b.Sum() / 2);
        //    return ss;
        //}
        private void CalculatePredLog()
        {
            predY = Math.Exp(InitialPopSize) * ArrayMath.Exp(dxs * Math.Exp(GrowthRate));
        }
 /// <summary>
 /// OLDER METHODS
 /// </summary>
 /// <param name="value"></param>
 /// <param name="grad"></param>
 /// <returns></returns>
 ///
 private void CalculatePred()
 {
     predY = InitialPopSize * ArrayMath.Exp(dxs * GrowthRate);
 }
 public static double[] CalculateSigmoids(double[][] weights, int[] featureIndices, double[] featureValues)
 {
     return(ArrayMath.Exp(CalculateSums(weights, featureIndices, featureValues)));
 }