Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/07/11 22:47:12 (13 years ago)
Author:
gkronber
Message:

#1081: worked on multi-variate time series prognosis

Location:
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveMeanSquaredErrorEvaluator.cs

    r7129 r7154  
    2222using System;
    2323using System.Collections.Generic;
     24using System.Drawing.Printing;
    2425using System.Linq;
    2526using HeuristicLab.Common;
     
    6566      DetermineScalingFactors(solution, problemData, interpreter, rows, out alpha, out beta);
    6667      var scaledSolution = Scale(solution, alpha, beta);
    67 
     68      string[] targetVariables = problemData.TargetVariables.ToArray();
    6869      var meanSquaredErrorCalculators = Enumerable.Range(0, problemData.TargetVariables.Count())
    6970        .Select(i => new OnlineMeanSquaredErrorCalculator()).ToArray();
    7071
    71       var allPredictedContinuations = interpreter.GetSymbolicExpressionTreeValues(scaledSolution, problemData.Dataset,
    72                                                                                   problemData.TargetVariables.ToArray(),
    73                                                                                   rows, horizon);
    74       var allContinuationsEnumerator = allPredictedContinuations.GetEnumerator();
    75       var rowsEnumerator = rows.GetEnumerator();
    76       while (allContinuationsEnumerator.MoveNext() & rowsEnumerator.MoveNext()) {
    77         var componentEnumerator = allContinuationsEnumerator.Current.GetEnumerator();
    78         var mseCalculatorsEnumerator = meanSquaredErrorCalculators.AsEnumerable().GetEnumerator();
    79         var targetVarEnumerator = problemData.TargetVariables.GetEnumerator();
    80         while (componentEnumerator.MoveNext() & mseCalculatorsEnumerator.MoveNext() & targetVarEnumerator.MoveNext()) {
    81           var stepEnumerator = componentEnumerator.Current.GetEnumerator();
    82           var actualContinuationEnumerator = problemData.Dataset.GetDoubleValues(targetVarEnumerator.Current,
    83                                                                        Enumerable.Range(rowsEnumerator.Current, horizon)).GetEnumerator();
    84           while (stepEnumerator.MoveNext() & actualContinuationEnumerator.MoveNext()) {
    85             double e = Math.Min(upperEstimationLimit, Math.Max(lowerEstimationLimit, stepEnumerator.Current));
    86             mseCalculatorsEnumerator.Current.Add(actualContinuationEnumerator.Current, e);
    87             if (mseCalculatorsEnumerator.Current.ErrorState == OnlineCalculatorError.InvalidValueAdded)
    88               return double.NaN;
     72      var allContinuationsEnumerator = interpreter.GetSymbolicExpressionTreeValues(scaledSolution, problemData.Dataset,
     73                                                                                  targetVariables,
     74                                                                                  rows, horizon).GetEnumerator();
     75      allContinuationsEnumerator.MoveNext();
     76      // foreach row
     77      foreach (var row in rows) {
     78        // foreach horizon
     79        for (int h = 0; h < horizon; h++) {
     80          // foreach component
     81          for (int i = 0; i < meanSquaredErrorCalculators.Length; i++) {
     82            double e = Math.Min(upperEstimationLimit, Math.Max(lowerEstimationLimit, allContinuationsEnumerator.Current));
     83            meanSquaredErrorCalculators[i].Add(problemData.Dataset.GetDoubleValue(targetVariables[i], row + h), e);
     84            if (meanSquaredErrorCalculators[i].ErrorState == OnlineCalculatorError.InvalidValueAdded)
     85              return double.MaxValue;
     86            allContinuationsEnumerator.MoveNext();
    8987          }
    9088        }
     
    9290      var meanCalculator = new OnlineMeanAndVarianceCalculator();
    9391      foreach (var calc in meanSquaredErrorCalculators) {
    94         if (calc.ErrorState != OnlineCalculatorError.None) return double.NaN;
     92        if (calc.ErrorState != OnlineCalculatorError.None) return double.MaxValue;
    9593        meanCalculator.Add(calc.MeanSquaredError);
    9694      }
     
    109107      //  }
    110108      //}
    111       return meanCalculator.MeanErrorState == OnlineCalculatorError.None ? meanCalculator.Mean : double.NaN;
     109      return meanCalculator.MeanErrorState == OnlineCalculatorError.None ? meanCalculator.Mean : double.MaxValue;
    112110    }
    113111
     
    153151      alpha = new double[nComponents];
    154152      beta = new double[nComponents];
    155       var oneStepPredictions = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset,
    156                                                                      targetVariables, rows,
    157                                                                      1);
     153      var oneStepPredictionsEnumerator = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, targetVariables, rows).GetEnumerator();
     154      var scalingParameterCalculators =
     155        Enumerable.Repeat(0, nComponents).Select(x => new OnlineLinearScalingParameterCalculator()).ToArray();
     156      var targetValues = problemData.Dataset.GetVectorEnumerable(targetVariables, rows);
     157      var targetValueEnumerator = targetValues.GetEnumerator();
     158
     159      var more = oneStepPredictionsEnumerator.MoveNext() & targetValueEnumerator.MoveNext();
     160      while (more) {
     161        for (int i = 0; i < nComponents; i++) {
     162          scalingParameterCalculators[i].Add(oneStepPredictionsEnumerator.Current, targetValueEnumerator.Current);
     163          more = oneStepPredictionsEnumerator.MoveNext() & targetValueEnumerator.MoveNext();
     164        }
     165      }
     166
    158167      for (int i = 0; i < nComponents; i++) {
    159         var target = problemData.Dataset.GetDoubleValues(targetVariables[i], rows);
    160         var prediction = oneStepPredictions.Select(v => v.ElementAt(i).First());
    161         OnlineCalculatorError errorState;
    162         OnlineLinearScalingParameterCalculator.Calculate(prediction, target, out alpha[i], out beta[i], out errorState);
    163         if (errorState != OnlineCalculatorError.None) {
    164           alpha[i] = 0;
    165           beta[i] = 1;
     168        if (scalingParameterCalculators[i].ErrorState == OnlineCalculatorError.None) {
     169          alpha[i] = scalingParameterCalculators[i].Alpha;
     170          beta[i] = scalingParameterCalculators[i].Beta;
     171        } else {
     172          alpha[i] = 0.0;
     173          beta[i] = 1.0;
    166174        }
    167175      }
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveProblem.cs

    r7129 r7154  
    5757      EstimationLimitsParameter.Hidden = true;
    5858
    59       Maximization.Value = true;
     59      Maximization.Value = false;
    6060      MaximumSymbolicExpressionTreeDepth.Value = InitialMaximumTreeDepth;
    6161      MaximumSymbolicExpressionTreeLength.Value = InitialMaximumTreeLength;
     
    106106          op.EstimationLimitsParameter.ActualName = EstimationLimitsParameter.Name;
    107107        }
     108        foreach (var op in operators.OfType<SymbolicTimeSeriesPrognosisSingleObjectiveTrainingBestSolutionAnalyzer>())
     109        {
     110          op.MaximizationParameter.ActualName = MaximizationParameter.Name;
     111          op.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
     112          op.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
     113          op.SymbolicDataAnalysisTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
     114          op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     115        }
    108116      }
    109117    }
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SymbolicTimeSeriesPrognosisModel.cs

    r7129 r7154  
    2020#endregion
    2121
     22using System;
    2223using System.Collections.Generic;
    2324using System.Drawing;
     
    6970      this.symbolicExpressionTree = cloner.Clone(original.symbolicExpressionTree);
    7071      this.interpreter = cloner.Clone(original.interpreter);
     72      this.targetVariables = new string[original.targetVariables.Length];
     73      Array.Copy(original.targetVariables, this.targetVariables, this.targetVariables.Length);
    7174    }
    7275    public SymbolicTimeSeriesPrognosisModel(ISymbolicExpressionTree tree, ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter, IEnumerable<string> targetVariables)
     
    8386
    8487    public IEnumerable<IEnumerable<IEnumerable<double>>> GetPrognosedValues(Dataset dataset, IEnumerable<int> rows, int horizon) {
    85       return Interpreter.GetSymbolicExpressionTreeValues(SymbolicExpressionTree, dataset, targetVariables, rows, horizon);
     88      var enumerator =
     89        Interpreter.GetSymbolicExpressionTreeValues(SymbolicExpressionTree, dataset, targetVariables, rows, horizon).
     90          GetEnumerator();
     91      foreach (var r in rows) {
     92        var l = new List<double[]>();
     93        for (int h = 0; h < horizon; h++) {
     94          double[] components = new double[targetVariables.Length];
     95          for (int c = 0; c < components.Length; c++) {
     96            enumerator.MoveNext();
     97            components[c] = enumerator.Current;
     98          }
     99          l.Add(components);
     100        }
     101        yield return l;
     102      }
    86103    }
    87104
     
    95112    public static void Scale(SymbolicTimeSeriesPrognosisModel model, ITimeSeriesPrognosisProblemData problemData) {
    96113      var dataset = problemData.Dataset;
    97       var targetVariables = problemData.TargetVariables;
     114      var targetVariables = problemData.TargetVariables.ToArray();
    98115      var rows = problemData.TrainingIndizes;
    99       int i = 0;
    100       int horizon = 1;
    101       var estimatedValues = model.Interpreter.GetSymbolicExpressionTreeValues(model.SymbolicExpressionTree, dataset, problemData.TargetVariables.ToArray(), rows, horizon)
    102         .ToArray();
    103       foreach (var targetVariable in targetVariables) {
    104         var targetValues = dataset.GetDoubleValues(targetVariable, rows);
    105         double alpha;
    106         double beta;
    107         OnlineCalculatorError errorState;
    108         OnlineLinearScalingParameterCalculator.Calculate(estimatedValues.Select(x => x.ElementAt(i).First()), targetValues,
    109           out alpha, out beta, out errorState);
    110         if (errorState != OnlineCalculatorError.None) continue;
     116      var estimatedValuesEnumerator = model.Interpreter.GetSymbolicExpressionTreeValues(model.SymbolicExpressionTree, dataset,
     117                                                                              targetVariables,
     118                                                                              rows).GetEnumerator();
     119      var scalingParameterCalculators =
     120        problemData.TargetVariables.Select(v => new OnlineLinearScalingParameterCalculator()).ToArray();
     121      var targetValuesEnumerator = problemData.Dataset.GetVectorEnumerable(targetVariables, rows).GetEnumerator();
    111122
     123      var more = targetValuesEnumerator.MoveNext() & estimatedValuesEnumerator.MoveNext();
     124      // foreach row
     125      while (more) {
     126        // foreach component
     127        for (int i = 0; i < targetVariables.Length; i++) {
     128          scalingParameterCalculators[i].Add(estimatedValuesEnumerator.Current, targetValuesEnumerator.Current);
     129          more = estimatedValuesEnumerator.MoveNext() & targetValuesEnumerator.MoveNext();
     130        }
     131      }
     132
     133      for (int i = 0; i < targetVariables.Count(); i++) {
     134        if (scalingParameterCalculators[i].ErrorState != OnlineCalculatorError.None) continue;
     135        double alpha = scalingParameterCalculators[i].Alpha;
     136        double beta = scalingParameterCalculators[i].Beta;
    112137        ConstantTreeNode alphaTreeNode = null;
    113138        ConstantTreeNode betaTreeNode = null;
     
    136161          startNode.InsertSubtree(i, scaledMainBranch);
    137162        }
    138         i++;
    139163      } // foreach
    140164    }
Note: See TracChangeset for help on using the changeset viewer.