/// <summary> /// Predictive covariance at a given pair of points /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public double Covariance(Vector x, Vector y) { double kxy = FixedParameters.Prior.Covariance(x, y); Vector kxB = FixedParameters.KernelOf_X_B(x); Vector kyB = FixedParameters.KernelOf_X_B(y); return(kxy - kxB.Inner(Beta * kyB)); }
/// <summary> /// Mean at a given point /// </summary> /// <param name="X"></param> /// <returns></returns> public double Mean(Vector X) { if (IsUniform()) { return(Gaussian.Uniform().GetMean()); } else { Vector kxB = FixedParameters.KernelOf_X_B(X); return(kxB.Inner(Alpha) + FixedParameters.Prior.Mean(X)); } }
/// <summary> /// Predictive Variance at a given point /// </summary> /// <param name="X">Input</param> /// <returns>Predictive variance</returns> public double Variance(Vector X) { if (IsUniform()) { Gaussian temp = new Gaussian(); temp.SetToUniform(); return(temp.GetVariance()); } else { Vector kxB = FixedParameters.KernelOf_X_B(X); return(FixedParameters.Prior.Variance(X) - Beta.QuadraticForm(kxB)); } }
/// <summary> /// Predictive distribution at a given list of points /// </summary> /// <param name="XList">List of inputs</param> /// <returns>Predictive distribution</returns> public VectorGaussian Joint(IList <Vector> XList) { if (IsUniform()) { return(VectorGaussian.Uniform(XList.Count)); } else { PositiveDefiniteMatrix kXX = FixedParameters.Prior.Covariance(XList); Matrix kXB = FixedParameters.KernelOf_X_B(XList); kXX.SetToDifference(kXX, kXB * Beta * kXB.Transpose()); VectorGaussian result = new VectorGaussian(kXB * Alpha + FixedParameters.Prior.Mean(XList), kXX); return(result); } }
/// <summary> /// Predictive distribution at a given point /// </summary> /// <param name="X">Input</param> /// <returns>Predictive distribution</returns> public Gaussian Marginal(Vector X) { if (IsUniform()) { return(Gaussian.Uniform()); } else { double kxx = FixedParameters.Prior.Variance(X); Vector kxb = FixedParameters.KernelOf_X_B(X); Gaussian result = new Gaussian( kxb.Inner(Alpha) + FixedParameters.Prior.Mean(X), kxx - Beta.QuadraticForm(kxb)); return(result); } }
/// <summary> /// Predictive coariance at a given list of points /// </summary> /// <param name="XList">List of inputs</param> /// <returns>Predictive covariance</returns> public PositiveDefiniteMatrix Covariance(IList <Vector> XList) { if (IsUniform()) { VectorGaussian temp = new VectorGaussian(XList.Count); temp.SetToUniform(); return(temp.GetVariance()); } else { PositiveDefiniteMatrix kXX = FixedParameters.Prior.Covariance(XList); Matrix kXB = FixedParameters.KernelOf_X_B(XList); kXX.SetToDifference(kXX, kXB * Beta * kXB.Transpose()); return(kXX); } }