36 #ifndef SHARK_OBJECTIVEFUNCTIONS_NEGATIVEGAUSSIANPROCESSEVIDENCE_H 37 #define SHARK_OBJECTIVEFUNCTIONS_NEGATIVEGAUSSIANPROCESSEVIDENCE_H 67 template<
class InputType = RealVector,
class OutputType = RealVector,
class LabelType = RealVector>
78 DatasetType
const& dataset,
80 bool unconstrained =
false 83 , m_unconstrained(unconstrained)
91 {
return "NegativeGaussianProcessEvidence"; }
109 RealVector kernelParams(kp);
111 blas::init(parameters) >> kernelParams, betaInv;
113 betaInv = std::exp(betaInv);
122 RealMatrix choleskyFactor(N,N);
127 double logDet = 2*
trace(log(choleskyFactor));
134 blas::solveTriangularSystemInPlace<blas::SolveAXB,blas::lower>(choleskyFactor,t);
138 double e = 0.5 * (-logDet -
norm_sqr(t) - N * std::log(2.0 * M_PI));
156 derivative.resize(1 + kp);
162 RealVector kernelParams(kp);
164 blas::init(parameters) >> kernelParams, betaInv;
166 betaInv = std::exp(betaInv);
176 RealMatrix choleskyFactor(N,N);
194 RealMatrix W=RealIdentityMatrix(N);
195 blas::solveTriangularCholeskyInPlace<blas::SolveAXB>(choleskyFactor,W);
198 RealVector z =
prod(W,t);
212 double betaInvDerivative = 0.5 *
trace(W) ;
214 betaInvDerivative *= betaInv;
217 blas::init(derivative)<<kernelGradient,betaInvDerivative;
221 for(std::size_t i=0; i<derivative.size(); i++)
222 if(std::abs(derivative(i)) < m_derivativeThresholds(i)) derivative(i) = 0;
226 double logDetM = 2*
trace(log(choleskyFactor));
227 double e = 0.5 * (-logDetM -
inner_prod(t, z) - N * std::log(2.0 * M_PI));
238 SHARK_ASSERT(m_derivativeThresholds.size() == c.size());
239 m_derivativeThresholds = c;
245 DatasetType m_dataset;
248 RealVector m_derivativeThresholds;
251 KernelType* mep_kernel;
256 bool m_unconstrained;