Changeset 13950


Ignore:
Timestamp:
06/29/16 13:59:19 (3 years ago)
Author:
mkommend
Message:

#2572: Merged r13582 and r13660 into stable.

Location:
stable
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression

  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4

  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/SymbolicRegressionSolutionsAnalyzer.cs

    r13636 r13950  
    2727using HeuristicLab.Common;
    2828using HeuristicLab.Core;
     29using HeuristicLab.Data;
    2930using HeuristicLab.Operators;
    3031using HeuristicLab.Optimization;
     
    3738    private const string ResultCollectionParameterName = "Results";
    3839    private const string RegressionSolutionQualitiesResultName = "Regression Solution Qualities";
     40    private const string TrainingQualityParameterName = "TrainingRSquared";
     41    private const string TestQualityParameterName = "TestRSquared";
    3942
    4043    public ILookupParameter<ResultCollection> ResultCollectionParameter {
    4144      get { return (ILookupParameter<ResultCollection>)Parameters[ResultCollectionParameterName]; }
     45    }
     46    public ILookupParameter<DoubleValue> TrainingQualityParameter {
     47      get { return (ILookupParameter<DoubleValue>)Parameters[TrainingQualityParameterName]; }
     48    }
     49    public ILookupParameter<DoubleValue> TestQualityParameter {
     50      get { return (ILookupParameter<DoubleValue>)Parameters[TestQualityParameterName]; }
    4251    }
    4352
     
    5665    public SymbolicRegressionSolutionsAnalyzer() {
    5766      Parameters.Add(new LookupParameter<ResultCollection>(ResultCollectionParameterName, "The result collection to store the analysis results."));
     67      Parameters.Add(new LookupParameter<DoubleValue>(TrainingQualityParameterName));
     68      Parameters.Add(new LookupParameter<DoubleValue>(TestQualityParameterName));
     69    }
     70
     71    [StorableHook(HookType.AfterDeserialization)]
     72    private void AfterDeserialization() {
     73      // BackwardsCompatibility3.3
     74
     75      #region Backwards compatible code, remove with 3.4
     76      if (!Parameters.ContainsKey(TrainingQualityParameterName))
     77        Parameters.Add(new LookupParameter<DoubleValue>(TrainingQualityParameterName));
     78      if (!Parameters.ContainsKey(TestQualityParameterName))
     79        Parameters.Add(new LookupParameter<DoubleValue>(TestQualityParameterName));
     80      #endregion
    5881    }
    5982
     
    6790
    6891      var dataTable = (DataTable)results[RegressionSolutionQualitiesResultName].Value;
     92
     93      // only if the parameters are available (not available in old persisted code)
     94      ILookupParameter<DoubleValue> trainingQualityParam = null;
     95      ILookupParameter<DoubleValue> testQualityParam = null;
     96      // store actual names of parameter because it is changed below
     97      trainingQualityParam = TrainingQualityParameter;
     98      string prevTrainingQualityParamName = trainingQualityParam.ActualName;
     99      testQualityParam = TestQualityParameter;
     100      string prevTestQualityParamName = testQualityParam.ActualName;
    69101      foreach (var result in results.Where(r => r.Value is IRegressionSolution)) {
    70102        var solution = (IRegressionSolution)result.Value;
    71103
    72         var trainingR2 = result.Name + Environment.NewLine + "Training R²";
    73         if (!dataTable.Rows.ContainsKey(trainingR2))
    74           dataTable.Rows.Add(new DataRow(trainingR2));
     104        var trainingR2Name = result.Name + " Training R²";
     105        if (!dataTable.Rows.ContainsKey(trainingR2Name))
     106          dataTable.Rows.Add(new DataRow(trainingR2Name));
    75107
    76         var testR2 = result.Name + Environment.NewLine + " Test R²";
    77         if (!dataTable.Rows.ContainsKey(testR2))
    78           dataTable.Rows.Add(new DataRow(testR2));
     108        var testR2Name = result.Name + " Test R²";
     109        if (!dataTable.Rows.ContainsKey(testR2Name))
     110          dataTable.Rows.Add(new DataRow(testR2Name));
    79111
    80         dataTable.Rows[trainingR2].Values.Add(solution.TrainingRSquared);
    81         dataTable.Rows[testR2].Values.Add(solution.TestRSquared);
     112        dataTable.Rows[trainingR2Name].Values.Add(solution.TrainingRSquared);
     113        dataTable.Rows[testR2Name].Values.Add(solution.TestRSquared);
     114
     115        // also add training and test R² to the scope using the parameters
     116        // HACK: we change the ActualName of the parameter to write two variables for each solution in the results collection
     117        trainingQualityParam.ActualName = trainingR2Name;
     118        trainingQualityParam.ActualValue = new DoubleValue(solution.TrainingRSquared);
     119        testQualityParam.ActualName = testR2Name;
     120        testQualityParam.ActualValue = new DoubleValue(solution.TestRSquared);
    82121      }
     122
     123      trainingQualityParam.ActualName = prevTrainingQualityParamName;
     124      testQualityParam.ActualName = prevTestQualityParamName;
    83125
    84126      return base.Apply();
Note: See TracChangeset for help on using the changeset viewer.