コード例 #1
0
        public GaussianProcessModel(IDataset ds, string targetVariable, IEnumerable <string> allowedInputVariables, IEnumerable <int> rows,
                                    IEnumerable <double> hyp, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction,
                                    bool scaleInputs = true)
            : base()
        {
            this.name                  = ItemName;
            this.description           = ItemDescription;
            this.meanFunction          = (IMeanFunction)meanFunction.Clone();
            this.covarianceFunction    = (ICovarianceFunction)covarianceFunction.Clone();
            this.targetVariable        = targetVariable;
            this.allowedInputVariables = allowedInputVariables.ToArray();


            int nVariables = this.allowedInputVariables.Length;

            meanParameter = hyp
                            .Take(this.meanFunction.GetNumberOfParameters(nVariables))
                            .ToArray();

            covarianceParameter = hyp.Skip(this.meanFunction.GetNumberOfParameters(nVariables))
                                  .Take(this.covarianceFunction.GetNumberOfParameters(nVariables))
                                  .ToArray();
            sqrSigmaNoise = Math.Exp(2.0 * hyp.Last());
            try {
                CalculateModel(ds, rows, scaleInputs);
            } catch (alglib.alglibexception ae) {
                // wrap exception so that calling code doesn't have to know about alglib implementation
                throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae);
            }
        }
コード例 #2
0
    public GaussianProcessModel(IDataset ds, string targetVariable, IEnumerable<string> allowedInputVariables, IEnumerable<int> rows,
      IEnumerable<double> hyp, IMeanFunction meanFunction, ICovarianceFunction covarianceFunction,
      bool scaleInputs = true)
      : base(targetVariable) {
      this.name = ItemName;
      this.description = ItemDescription;
      this.meanFunction = (IMeanFunction)meanFunction.Clone();
      this.covarianceFunction = (ICovarianceFunction)covarianceFunction.Clone();
      this.allowedInputVariables = allowedInputVariables.ToArray();


      int nVariables = this.allowedInputVariables.Length;
      meanParameter = hyp
        .Take(this.meanFunction.GetNumberOfParameters(nVariables))
        .ToArray();

      covarianceParameter = hyp.Skip(this.meanFunction.GetNumberOfParameters(nVariables))
                                             .Take(this.covarianceFunction.GetNumberOfParameters(nVariables))
                                             .ToArray();
      sqrSigmaNoise = Math.Exp(2.0 * hyp.Last());
      try {
        CalculateModel(ds, rows, scaleInputs);
      }
      catch (alglib.alglibexception ae) {
        // wrap exception so that calling code doesn't have to know about alglib implementation
        throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae);
      }
    }
        private IItem CreateSolution()
        {
            var problemData           = ProblemData;
            var ds                    = problemData.Dataset;
            var targetVariable        = problemData.TargetVariable;
            var allowedInputVariables = problemData.AllowedInputVariables.ToArray();
            var trainingRows          = problemData.TrainingIndices.ToArray();

            lock (problemStateLocker) {
                var model = new GaussianProcessModel(ds, targetVariable, allowedInputVariables, trainingRows, bestHyperParameters, (IMeanFunction)meanFunc.Clone(), (ICovarianceFunction)covFunc.Clone());
                model.FixParameters();
                return(model.CreateRegressionSolution((IRegressionProblemData)ProblemData.Clone()));
            }
        }