Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/15/20 08:54:32 (4 years ago)
Author:
chaider
Message:

#2971

  • Checked ConstraintSatisfied before calculating r2
  • Removed code duplications in SymbolicRegressionSingleObjectiveConstraintPearsonRSquaredEvaluator and SymbolicRegressionSingleObjectiveConstraintConstOptEvaluator
Location:
branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionSingleObjectiveConstraintConstOptEvaluator.cs

    r17506 r17511  
    6161      var variableRanges = problemData.VariableRanges.GetIntervals();
    6262
     63      if (!SymbolicRegressionConstraintAnalyzer.ConstraintsSatisfied(constraints, variableRanges, tree)) {
     64        return 0;
     65      }
     66
    6367      var r2 = SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(interpreter, tree, problemData, problemData.TrainingIndices, applyLinearScaling, 10);
    64       if (!SymbolicRegressionConstraintAnalyzer.ConstraintsSatisfied(constraints, variableRanges, tree)) {
    65         r2 = 0;
    66       }
    6768      return r2;
    6869    }
     
    8586      return r2;
    8687    }
    87 
    88     private static bool HasConstraintVioluations(IEnumerable<IntervalConstraint> constraints, IntervalInterpreter intervalInterpreter,
    89       IDictionary<string, Interval> variableRanges, ISymbolicExpressionTree solution) {
    90       foreach (var constraint in constraints) {
    91         if (constraint.Variable != null && !variableRanges.ContainsKey(constraint.Variable))
    92           throw new ArgumentException($"The given variable {constraint.Variable} in the constraint does not exists in the model.", nameof(IntervalConstraintsParser));
    93         if (!constraint.IsDerivative) {
    94           var res = intervalInterpreter.GetSymbolicExpressionTreeInterval(solution, variableRanges);
    95           if (!constraint.Interval.Contains(res)) {
    96             return true;
    97           }
    98         } else {
    99           var tree = solution;
    100           for (var i = 0; i < constraint.NumberOfDerivations; ++i) {
    101             tree = DerivativeCalculator.Derive(tree, constraint.Variable);
    102           }
    103           var res = intervalInterpreter.GetSymbolicExpressionTreeInterval(tree, variableRanges);
    104           if (!constraint.Interval.Contains(res)) {
    105             return true;
    106           }
    107         }
    108       }
    109       return false;
    110     }
    11188  }
    11289}
  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionSingleObjectiveConstraintPearsonRSquaredEvaluator.cs

    r17504 r17511  
    6262      var tree = solution;
    6363
    64       double r;
    65       if (applyLinearScaling) {
    66         var rCalculator = new OnlinePearsonsRCalculator();
    67         CalculateWithScaling(targetValues, estimatedValues, lowerEstimationLimit, upperEstimationLimit, rCalculator, problemData.Dataset.Rows);
    68         var model = new SymbolicRegressionModel(problemData.TargetVariable, solution, interpreter, lowerEstimationLimit, upperEstimationLimit);
    69         model.Scale(problemData);
    70         tree = model.SymbolicExpressionTree;
    71         errorState = rCalculator.ErrorState;
    72         r = rCalculator.R;
    73       } else {
    74         IEnumerable<double> boundedEstimatedValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit);
    75         r = OnlinePearsonsRCalculator.Calculate(targetValues, boundedEstimatedValues, out errorState);
    76       }
    77 
    7864      if (!SymbolicRegressionConstraintAnalyzer.ConstraintsSatisfied(constraints, variableRanges, tree)) {
    7965        return 0;
    8066      }
    8167
    82       if (errorState != OnlineCalculatorError.None) return double.NaN;
    83       return r * r;
     68      var r2 = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(interpreter, solution, lowerEstimationLimit,
     69        upperEstimationLimit, problemData, rows, applyLinearScaling);
     70
     71      return r2;
    8472    }
    8573
Note: See TracChangeset for help on using the changeset viewer.