Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/23/18 18:57:36 (6 years ago)
Author:
lkammere
Message:

#2886: Make constant optimization toggleable in algorithm.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/Analysis/RSquaredEvaluator.cs

    r15860 r15861  
    1919    private readonly ISymbolicDataAnalysisExpressionTreeInterpreter expressionTreeLinearInterpreter = new SymbolicDataAnalysisExpressionTreeLinearInterpreter();
    2020
     21    public bool OptimizeConstants { get; set; }
     22
    2123    public RSquaredEvaluator() { }
    2224
    23     protected RSquaredEvaluator(RSquaredEvaluator original, Cloner cloner) { }
     25    protected RSquaredEvaluator(RSquaredEvaluator original, Cloner cloner) {
     26      this.OptimizeConstants = original.OptimizeConstants;
     27    }
    2428
    2529    public override IDeepCloneable Clone(Cloner cloner) {
     
    7276      // TODO: Restarts
    7377
    74       double r2 = SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(expressionTreeLinearInterpreter,
    75         tree,
    76         problemData,
    77         problemData.TrainingIndices,
    78         applyLinearScaling: false,
    79         maxIterations: 50,
    80         updateVariableWeights: true,
    81         updateConstantsInTree: true);
    82 
    83       foreach (var symbolicExpressionTreeNode in tree.IterateNodesPostfix()) {
    84         ConstantTreeNode constTreeNode = symbolicExpressionTreeNode as ConstantTreeNode;
    85         if (constTreeNode != null && constTreeNode.Value.IsAlmost(0.0)) {
    86           constTreeNode.Value = 0.0;
    87         }
    88       }
     78      double r2;
    8979
    9080      SymbolicRegressionModel model = new SymbolicRegressionModel(
    91         problemData.TargetVariable,
    92         tree,
    93         expressionTreeLinearInterpreter);
     81          problemData.TargetVariable,
     82          tree,
     83          expressionTreeLinearInterpreter);
    9484
    95       //var target = problemData.TargetVariableTrainingValues;
    96       //var estVals = model.GetEstimatedValues(problemData.Dataset, problemData.TrainingIndices);
    97       //OnlineCalculatorError error;
    98       //double r2 = OnlinePearsonsRCalculator.Calculate(target, estVals, out error);
    99       //if (error != OnlineCalculatorError.None) r2 = 0.0;
     85      if (OptimizeConstants) {
     86        r2 = SymbolicRegressionConstantOptimizationEvaluator.OptimizeConstants(expressionTreeLinearInterpreter,
     87          tree,
     88          problemData,
     89          problemData.TrainingIndices,
     90          applyLinearScaling: false,
     91          maxIterations: 50,
     92          updateVariableWeights: true,
     93          updateConstantsInTree: true);
     94
     95        foreach (var symbolicExpressionTreeNode in tree.IterateNodesPostfix()) {
     96          ConstantTreeNode constTreeNode = symbolicExpressionTreeNode as ConstantTreeNode;
     97          if (constTreeNode != null && constTreeNode.Value.IsAlmost(0.0)) {
     98            constTreeNode.Value = 0.0;
     99          }
     100        }
     101
     102
     103      } else {
     104        var target = problemData.TargetVariableTrainingValues;
     105        var estVals = model.GetEstimatedValues(problemData.Dataset, problemData.TrainingIndices);
     106        OnlineCalculatorError error;
     107        r2 = OnlinePearsonsRCalculator.Calculate(target, estVals, out error);
     108        if (error != OnlineCalculatorError.None) r2 = 0.0;
     109      }
    100110
    101111      var bestR2Result = (DoubleValue)algorithm.Results[BestTrainingQualityResultName].Value;
Note: See TracChangeset for help on using the changeset viewer.