Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/12/12 10:31:56 (12 years ago)
Author:
mkommend
Message:

#1081: Improved performance of time series prognosis.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/InteractiveSymbolicTimeSeriesPrognosisSolutionSimplifierView.cs

    r7463 r7989  
    5050
    5151    protected override void UpdateModel(ISymbolicExpressionTree tree) {
    52       var model = new SymbolicTimeSeriesPrognosisModel(tree, Content.Model.Interpreter, Content.ProblemData.TargetVariables.ToArray());
     52      var model = new SymbolicTimeSeriesPrognosisModel(tree, Content.Model.Interpreter);
    5353      SymbolicTimeSeriesPrognosisModel.Scale(model, Content.ProblemData);
    5454      Content.Model = model;
     
    6666    protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicExpressionTree tree) {
    6767      var interpreter = Content.Model.Interpreter;
     68      var rows = Content.ProblemData.TrainingIndizes;
    6869      var dataset = Content.ProblemData.Dataset;
    69       var rows = Content.ProblemData.TrainingIndizes;
    70       Dictionary<ISymbolicExpressionTreeNode, double> impactValues =
    71         new Dictionary<ISymbolicExpressionTreeNode, double>();
    72       var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, Content.ProblemData.TargetVariables.ToArray(), rows, 1)
    73         .ToArray();
    74       int i = 0;
    75       int nTargetVariables = Content.ProblemData.TargetVariables.Count();
    76       foreach (var targetVariable in Content.ProblemData.TargetVariables) {
    77         List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubtree(0).GetSubtree(i).IterateNodesPostfix().ToList();
    78         var targetValues = dataset.GetDoubleValues(targetVariable, rows);
    79         OnlineCalculatorError errorState;
    80         double originalR2 = OnlinePearsonsRSquaredCalculator.Calculate(targetValues, originalOutput.Skip(i).TakeEvery(nTargetVariables), out errorState);
    81         if (errorState != OnlineCalculatorError.None) originalR2 = 0.0;
     70      var targetVariable = Content.ProblemData.TargetVariable;
     71      var targetValues = dataset.GetDoubleValues(targetVariable, rows);
     72      var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows).ToArray();
    8273
    83         foreach (ISymbolicExpressionTreeNode node in nodes) {
    84           var parent = node.Parent;
    85           constantNode.Value = CalculateReplacementValue(node, tree);
    86           ISymbolicExpressionTreeNode replacementNode = constantNode;
    87           SwitchNode(parent, node, replacementNode);
    88           var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, Content.ProblemData.TargetVariables.ToArray(), rows, 1);
    89           double newR2 = OnlinePearsonsRSquaredCalculator.Calculate(targetValues, newOutput.Skip(i).TakeEvery(nTargetVariables), out errorState);
    90           if (errorState != OnlineCalculatorError.None) newR2 = 0.0;
     74      Dictionary<ISymbolicExpressionTreeNode, double> impactValues = new Dictionary<ISymbolicExpressionTreeNode, double>();
     75      List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPostfix().ToList();
     76      OnlineCalculatorError errorState;
     77      double originalR2 = OnlinePearsonsRSquaredCalculator.Calculate(targetValues, originalOutput, out errorState);
     78      if (errorState != OnlineCalculatorError.None) originalR2 = 0.0;
    9179
    92           // impact = 0 if no change
    93           // impact < 0 if new solution is better
    94           // impact > 0 if new solution is worse
    95           impactValues[node] = originalR2 - newR2;
    96           SwitchNode(parent, replacementNode, node);
    97         }
    98         i++;
     80      foreach (ISymbolicExpressionTreeNode node in nodes) {
     81        var parent = node.Parent;
     82        constantNode.Value = CalculateReplacementValue(node, tree);
     83        ISymbolicExpressionTreeNode replacementNode = constantNode;
     84        SwitchNode(parent, node, replacementNode);
     85        var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows);
     86        double newR2 = OnlinePearsonsRSquaredCalculator.Calculate(targetValues, newOutput, out errorState);
     87        if (errorState != OnlineCalculatorError.None) newR2 = 0.0;
     88
     89        // impact = 0 if no change
     90        // impact < 0 if new solution is better
     91        // impact > 0 if new solution is worse
     92        impactValues[node] = originalR2 - newR2;
     93        SwitchNode(parent, replacementNode, node);
    9994      }
    10095      return impactValues;
     
    113108      var interpreter = Content.Model.Interpreter;
    114109      var rows = Content.ProblemData.TrainingIndizes;
    115       var allPrognosedValues = interpreter.GetSymbolicExpressionTreeValues(tempTree, Content.ProblemData.Dataset, Content.ProblemData.TargetVariables.ToArray(), rows, 1);
     110      var allPrognosedValues = interpreter.GetSymbolicExpressionTreeValues(tempTree, Content.ProblemData.Dataset, rows);
    116111
    117112      return allPrognosedValues.Median();
Note: See TracChangeset for help on using the changeset viewer.