Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/10/17 19:19:26 (7 years ago)
Author:
gkronber
Message:

#2782: merged r14899,r14918,r15160,r15163,r15165,r15187 from trunk to stable

Location:
stable
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Algorithms.DataAnalysis

  • stable/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModel.cs

    r15143 r15188  
    4646
    4747    [Storable]
     48    private double loocvNegLogPseudoLikelihood;
     49    public double LooCvNegativeLogPseudoLikelihood {
     50      get { return loocvNegLogPseudoLikelihood; }
     51    }
     52
     53    [Storable]
    4854    private double[] hyperparameterGradients;
    4955    public double[] HyperparameterGradients {
     
    128134      this.trainingDataset = cloner.Clone(original.trainingDataset);
    129135      this.negativeLogLikelihood = original.negativeLogLikelihood;
     136      this.loocvNegLogPseudoLikelihood = original.loocvNegLogPseudoLikelihood;
    130137      this.sqrSigmaNoise = original.sqrSigmaNoise;
    131138      if (original.meanParameter != null) {
     
    217224      alglib.spdmatrixcholeskyinverse(ref lCopy, n, false, out info, out matInvRep);
    218225      if (info != 1) throw new ArgumentException("Can't invert matrix to calculate gradients.");
     226
     227      // LOOCV log pseudo-likelihood (or log predictive probability) (GPML page 116 and 117)
     228      var sumLoo = 0.0;
     229      var ki = new double[n];
     230      for (int i = 0; i < n; i++) {
     231        for (int j = 0; j < n; j++) ki[j] = cov.Covariance(x, i, j);
     232        ki[i] += sqrSigmaNoise;
     233
     234        var yi = Util.ScalarProd(ki, alpha);
     235        var yi_loo = yi - alpha[i] / (lCopy[i, i] / sqrSigmaNoise);
     236        var s2_loo = 1.0 / (lCopy[i, i] / sqrSigmaNoise);
     237        var err = ym[i] - yi_loo;
     238        var nll_loo = 0.5 * Math.Log(2 * Math.PI * s2_loo) + 0.5 * err * err / s2_loo;
     239        sumLoo += nll_loo;
     240      }
     241      loocvNegLogPseudoLikelihood = sumLoo;
     242
    219243      for (int i = 0; i < n; i++) {
    220244        for (int j = 0; j <= i; j++)
Note: See TracChangeset for help on using the changeset viewer.