Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/23/10 18:54:35 (14 years ago)
Author:
gkronber
Message:

Added output parameter for validation quality to validation analyzer, added input parameter for validation quality to overfitting analyzer, and fixed bugs in pruning operator. #1142

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/OverfittingAnalyzer.cs

    r4275 r4297  
    6161      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
    6262    }
     63    public ScopeTreeLookupParameter<DoubleValue> ValidationQualityParameter {
     64      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["ValidationQuality"]; }
     65    }
    6366    public IValueLookupParameter<ISymbolicExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter {
    6467      get { return (IValueLookupParameter<ISymbolicExpressionTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; }
     
    163166      Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze."));
    164167      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality"));
     168      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("ValidationQuality"));
    165169      Parameters.Add(new LookupParameter<BoolValue>(MaximizationParameterName, "The direction of optimization."));
    166170      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used for the analysis of symbolic expression trees."));
     
    180184      Parameters.Add(new LookupParameter<DoubleValue>("InitialTrainingQuality"));
    181185      Parameters.Add(new LookupParameter<DoubleMatrix>("TrainingAndValidationQualities"));
    182       Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue(0.1)));
     186      Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue(1)));
    183187
    184188    }
     
    202206      }
    203207      if (!Parameters.ContainsKey("Percentile")) {
    204         Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue(0.1)));
     208        Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue(1)));
     209      }
     210      if (!Parameters.ContainsKey("ValidationQuality")) {
     211        Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("ValidationQuality"));
    205212      }
    206213    }
     
    209216      var trees = SymbolicExpressionTree;
    210217      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
     218      ItemArray<DoubleValue> validationQualities = ValidationQualityParameter.ActualValue;
    211219
    212220      string targetVariable = ProblemData.TargetVariable.Value;
     
    226234      //SymbolicExpressionTree bestTree = null;
    227235
    228       List<double> validationQualities = new List<double>();
    229       foreach (var tree in trees) {
    230         double quality = Evaluator.Evaluate(SymbolicExpressionTreeInterpreter, tree,
    231           lowerEstimationLimit, upperEstimationLimit,
    232           ProblemData.Dataset, targetVariable,
    233          rows);
    234         validationQualities.Add(quality);
    235         //if ((Maximization.Value && quality > bestQuality) ||
    236         //    (!Maximization.Value && quality < bestQuality)) {
    237         //  bestQuality = quality;
    238         //  bestTree = tree;
    239         //}
    240       }
     236      //List<double> validationQualities = new List<double>();
     237      //foreach (var tree in trees) {
     238      //  double quality = Evaluator.Evaluate(SymbolicExpressionTreeInterpreter, tree,
     239      //    lowerEstimationLimit, upperEstimationLimit,
     240      //    ProblemData.Dataset, targetVariable,
     241      //   rows);
     242      //  validationQualities.Add(quality);
     243      //  //if ((Maximization.Value && quality > bestQuality) ||
     244      //  //    (!Maximization.Value && quality < bestQuality)) {
     245      //  //  bestQuality = quality;
     246      //  //  bestTree = tree;
     247      //  //}
     248      //}
    241249
    242250      //if (RelativeValidationQualityParameter.ActualValue == null) {
    243251      // first call initialize the relative quality using the difference between average training and validation quality
    244252      double avgTrainingQuality = qualities.Select(x => x.Value).Median();
    245       double avgValidationQuality = validationQualities.Median();
     253      double avgValidationQuality = validationQualities.Select(x => x.Value).Median();
    246254
    247255      if (Maximization.Value)
     
    254262      // best first (only for maximization
    255263      var orderedDistinctPairs = (from index in Enumerable.Range(0, qualities.Length)
    256                                   select new { Training = qualities[index].Value, Validation = validationQualities[index] })
    257                                  .Distinct()
     264                                  select new { Training = qualities[index].Value, Validation = validationQualities[index].Value })
    258265                                 .OrderBy(x => -x.Training)
    259266                                 .ToList();
Note: See TracChangeset for help on using the changeset viewer.