/// <summary>Predicts the given o.</summary> /// <exception cref="InvalidOperationException">Thrown when the requested operation is invalid.</exception> /// <param name="y">The Vector to process.</param> /// <returns>An object.</returns> public override double Predict(Vector y) { this.Preprocess(y); if (Root == null || Descriptor == null) { throw new InvalidOperationException("Invalid Model - Missing information"); } Vector lp = Vector.Zeros(Root.Probabilities.Length); for (int i = 0; i < Root.Probabilities.Length; i++) { Statistic stat = Root.Probabilities[i]; lp[i] = System.Math.Log(stat.Probability); for (int j = 0; j < y.Length; j++) { Measure conditional = stat.Conditionals[j]; var p = conditional.GetStatisticFor(y[j]); // check for missing range, assign bad probability lp[i] += System.Math.Log(p == null ? 10e-10 : p.Probability); } } var idx = lp.MaxIndex(); return(Root.Probabilities[idx].X.Min); }
/// <inheritdoc /> public override Tuple <double, double> Predict(Vector y, bool t) { if (this.Root == null || this.Descriptor == null) { throw new InvalidOperationException("Invalid Model - Missing information"); } Vector lp = Vector.Zeros(this.Root.Probabilities.Length); Vector test = Vector.Zeros(this.Root.Probabilities.Length); Vector log = Vector.Zeros(this.Root.Probabilities.Length); for (int i = 0; i < this.Root.Probabilities.Length; i++) { Statistic stat = this.Root.Probabilities[i]; lp[i] = (stat.Probability); test[i] = (stat.Probability); log[i] = System.Math.Log(stat.Probability); for (int j = 0; j < y.Length; j++) { Measure conditional = stat.Conditionals[j]; var p = conditional.GetStatisticFor(y[j]); // check for missing range, assign bad probability lp[i] *= (p == null ? 10e-10 : p.Probability); test[i] += (p == null ? 10e-10 : p.Probability); log[i] += System.Math.Log(p == null ? 10e-10 : p.Probability); } } //for (int i = 0; i < lp.Length; i++) // Console.WriteLine("Prob " +i+ "*: " + lp[i] + "\t +:" + test[i] + "\t Log +:" + log[i]); var idx = lp.MaxIndex(); var precision = lp[idx] / lp.Sum(); return(new Tuple <double, double>([email protected][idx].X.Min, precision)); }