Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/08/11 15:36:17 (14 years ago)
Author:
gkronber
Message:

Added calculation of accuracy of best training solution. #1369

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/TrainingBestScaledSymbolicRegressionSolutionAnalyzer.cs

    r5253 r5259  
    3232using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    3333using HeuristicLab.Problems.DataAnalysis.Symbolic;
     34using HeuristicLab.Problems.DataAnalysis.Evaluators;
    3435
    3536namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers {
     
    4445    private const string MaximizationParameterName = "Maximization";
    4546    private const string CalculateSolutionComplexityParameterName = "CalculateSolutionComplexity";
     47    private const string CalculateSolutionAccuracyParameterName = "CalculateSolutionAccuracy";
    4648    private const string SymbolicExpressionTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter";
    4749    private const string ProblemDataParameterName = "DataAnalysisProblemData";
    4850    private const string UpperEstimationLimitParameterName = "UpperEstimationLimit";
    4951    private const string LowerEstimationLimitParameterName = "LowerEstimationLimit";
    50     private const string BestSolutionParameterName = "Best solution (training)";
    51     private const string BestSolutionQualityParameterName = "Best solution quality (training)";
    52     private const string BestSolutionLengthParameterName = "Best solution length (training)";
    53     private const string BestSolutionHeightParameterName = "Best solution height (training)";
    54     private const string BestSolutionVariablesParameterName = "Best solution variables (training)";
     52    private const string BestSolutionParameterName = "Best training solution";
     53    private const string BestSolutionQualityParameterName = "Best training solution quality";
     54    private const string BestSolutionLengthParameterName = "Best training solution length";
     55    private const string BestSolutionHeightParameterName = "Best training solution height";
     56    private const string BestSolutionVariablesParameterName = "Best training solution variables";
     57    private const string BestSolutionTrainingRSquaredParameterName = "Best training solution R² (training)";
     58    private const string BestSolutionTestRSquaredParameterName = "Best training solution R² (test)";
     59    private const string BestSolutionTrainingMseParameterName = "Best training solution mean squared error (training)";
     60    private const string BestSolutionTestMseParameterName = "Best training solution mean squared error (test)";
     61    private const string BestSolutionTrainingRelativeErrorParameterName = "Best training solution relative error (training)";
     62    private const string BestSolutionTestRelativeErrorParameterName = "Best training solution relative error (test)";
    5563    private const string ResultsParameterName = "Results";
    5664
     
    6876      get { return (IValueParameter<BoolValue>)Parameters[CalculateSolutionComplexityParameterName]; }
    6977    }
     78    public IValueParameter<BoolValue> CalculateSolutionAccuracyParameter {
     79      get { return (IValueParameter<BoolValue>)Parameters[CalculateSolutionAccuracyParameterName]; }
     80    }
    7081    public IValueLookupParameter<ISymbolicExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter {
    7182      get { return (IValueLookupParameter<ISymbolicExpressionTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; }
     
    95106    public ILookupParameter<IntValue> BestSolutionVariablesParameter {
    96107      get { return (ILookupParameter<IntValue>)Parameters[BestSolutionVariablesParameterName]; }
    97     }   
     108    }
     109    public ILookupParameter<DoubleValue> BestSolutionTrainingRSquaredParameter {
     110      get { return (ILookupParameter<DoubleValue>)Parameters[BestSolutionTrainingRSquaredParameterName]; }
     111    }
     112    public ILookupParameter<DoubleValue> BestSolutionTestRSquaredParameter {
     113      get { return (ILookupParameter<DoubleValue>)Parameters[BestSolutionTestRSquaredParameterName]; }
     114    }
     115    public ILookupParameter<DoubleValue> BestSolutionTrainingMseParameter {
     116      get { return (ILookupParameter<DoubleValue>)Parameters[BestSolutionTrainingMseParameterName]; }
     117    }
     118    public ILookupParameter<DoubleValue> BestSolutionTestMseParameter {
     119      get { return (ILookupParameter<DoubleValue>)Parameters[BestSolutionTestMseParameterName]; }
     120    }
     121    public ILookupParameter<DoubleValue> BestSolutionTrainingRelativeErrorParameter {
     122      get { return (ILookupParameter<DoubleValue>)Parameters[BestSolutionTrainingRelativeErrorParameterName]; }
     123    }
     124    public ILookupParameter<DoubleValue> BestSolutionTestRelativeErrorParameter {
     125      get { return (ILookupParameter<DoubleValue>)Parameters[BestSolutionTestRelativeErrorParameterName]; }
     126    }
    98127    public ILookupParameter<ResultCollection> ResultsParameter {
    99128      get { return (ILookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
     
    114143      set { CalculateSolutionComplexityParameter.Value = value; }
    115144    }
     145    public BoolValue CalculateSolutionAccuracy {
     146      get { return CalculateSolutionAccuracyParameter.Value; }
     147      set { CalculateSolutionAccuracyParameter.Value = value; }
     148    }
    116149    public ISymbolicExpressionTreeInterpreter SymbolicExpressionTreeInterpreter {
    117150      get { return SymbolicExpressionTreeInterpreterParameter.ActualValue; }
     
    149182      set { BestSolutionVariablesParameter.ActualValue = value; }
    150183    }
    151 
     184    public DoubleValue BestSolutionTrainingRSquared {
     185      get { return BestSolutionTrainingRSquaredParameter.ActualValue; }
     186      set { BestSolutionTrainingRSquaredParameter.ActualValue = value; }
     187    }
     188    public DoubleValue BestSolutionTestRSquared {
     189      get { return BestSolutionTestRSquaredParameter.ActualValue; }
     190      set { BestSolutionTestRSquaredParameter.ActualValue = value; }
     191    }
     192    public DoubleValue BestSolutionTrainingMse {
     193      get { return BestSolutionTrainingMseParameter.ActualValue; }
     194      set { BestSolutionTrainingMseParameter.ActualValue = value; }
     195    }
     196    public DoubleValue BestSolutionTestMse {
     197      get { return BestSolutionTestMseParameter.ActualValue; }
     198      set { BestSolutionTestMseParameter.ActualValue = value; }
     199    }
     200    public DoubleValue BestSolutionTrainingRelativeError {
     201      get { return BestSolutionTrainingRelativeErrorParameter.ActualValue; }
     202      set { BestSolutionTrainingRelativeErrorParameter.ActualValue = value; }
     203    }
     204    public DoubleValue BestSolutionTestRelativeError {
     205      get { return BestSolutionTestRelativeErrorParameter.ActualValue; }
     206      set { BestSolutionTestRelativeErrorParameter.ActualValue = value; }
     207    }
    152208    #endregion
    153209
     
    161217      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName, "The qualities of the symbolic expression trees to analyze."));
    162218      Parameters.Add(new ValueParameter<BoolValue>(CalculateSolutionComplexityParameterName, "Determines if the length and height of the training best solution should be calculated.", new BoolValue(false)));
     219      Parameters.Add(new ValueParameter<BoolValue>(CalculateSolutionAccuracyParameterName, "Determines if the accuracy of the training best solution on the training and test set should be calculated.", new BoolValue(false)));
    163220      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used for the analysis of symbolic expression trees."));
    164221      Parameters.Add(new ValueLookupParameter<DataAnalysisProblemData>(ProblemDataParameterName, "The problem data for which the symbolic expression tree is a solution."));
     
    170227      Parameters.Add(new LookupParameter<IntValue>(BestSolutionHeightParameterName, "The height of the best symbolic regression solution."));
    171228      Parameters.Add(new LookupParameter<IntValue>(BestSolutionVariablesParameterName, "The number of variables used by the best symbolic regression solution."));
     229      Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionTrainingRSquaredParameterName, "The R² value on the training set of the best symbolic regression solution."));
     230      Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionTestRSquaredParameterName, "The R² value on the test set of the best symbolic regression solution."));
     231      Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionTrainingMseParameterName, "The mean squared error on the training set of the best symbolic regression solution."));
     232      Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionTestMseParameterName, "The mean squared error value on the test set of the best symbolic regression solution."));
     233      Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionTrainingRelativeErrorParameterName, "The relative error on the training set of the best symbolic regression solution."));
     234      Parameters.Add(new LookupParameter<DoubleValue>(BestSolutionTestRelativeErrorParameterName, "The relative error value on the test set of the best symbolic regression solution."));
    172235      Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName, "The result collection where the best symbolic regression solution should be stored."));
    173236    }
     
    235298            Results[BestSolutionLengthParameterName].Value = BestSolutionLength;
    236299            Results[BestSolutionHeightParameterName].Value = BestSolutionHeight;
    237             Results[BestSolutionVariablesParameterName].Value = BestSolutionHeight;
     300            Results[BestSolutionVariablesParameterName].Value = BestSolutionVariables;
    238301          }
     302        }
     303
     304        if (CalculateSolutionAccuracy.Value) {
     305          #region update R2,MSE, Rel Error
     306          IEnumerable<double> trainingValues = ProblemData.Dataset.GetEnumeratedVariableValues(ProblemData.TargetVariable.Value, ProblemData.TrainingIndizes);
     307          IEnumerable<double> testValues = ProblemData.Dataset.GetEnumeratedVariableValues(ProblemData.TargetVariable.Value, ProblemData.TestIndizes);
     308          OnlineMeanSquaredErrorEvaluator mseEvaluator = new OnlineMeanSquaredErrorEvaluator();
     309          OnlineMeanAbsolutePercentageErrorEvaluator relErrorEvaluator = new OnlineMeanAbsolutePercentageErrorEvaluator();
     310          OnlinePearsonsRSquaredEvaluator r2Evaluator = new OnlinePearsonsRSquaredEvaluator();
     311
     312          #region training
     313          var originalEnumerator = trainingValues.GetEnumerator();
     314          var estimatedEnumerator = solution.EstimatedTrainingValues.GetEnumerator();
     315          while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
     316            mseEvaluator.Add(originalEnumerator.Current, estimatedEnumerator.Current);
     317            r2Evaluator.Add(originalEnumerator.Current, estimatedEnumerator.Current);
     318            relErrorEvaluator.Add(originalEnumerator.Current, estimatedEnumerator.Current);
     319          }
     320          double trainingR2 = r2Evaluator.RSquared;
     321          double trainingMse = mseEvaluator.MeanSquaredError;
     322          double trainingRelError = relErrorEvaluator.MeanAbsolutePercentageError;
     323          #endregion
     324
     325          mseEvaluator.Reset();
     326          relErrorEvaluator.Reset();
     327          r2Evaluator.Reset();
     328
     329          #region test
     330          originalEnumerator = testValues.GetEnumerator();
     331          estimatedEnumerator = solution.EstimatedTestValues.GetEnumerator();
     332          while (originalEnumerator.MoveNext() & estimatedEnumerator.MoveNext()) {
     333            mseEvaluator.Add(originalEnumerator.Current, estimatedEnumerator.Current);
     334            r2Evaluator.Add(originalEnumerator.Current, estimatedEnumerator.Current);
     335            relErrorEvaluator.Add(originalEnumerator.Current, estimatedEnumerator.Current);
     336          }
     337          double testR2 = r2Evaluator.RSquared;
     338          double testMse = mseEvaluator.MeanSquaredError;
     339          double testRelError = relErrorEvaluator.MeanAbsolutePercentageError;
     340          #endregion
     341          BestSolutionTrainingRSquared = new DoubleValue(trainingR2);
     342          BestSolutionTestRSquared = new DoubleValue(testR2);
     343          BestSolutionTrainingMse = new DoubleValue(trainingMse);
     344          BestSolutionTestMse = new DoubleValue(testMse);
     345          BestSolutionTrainingRelativeError = new DoubleValue(trainingRelError);
     346          BestSolutionTestRelativeError = new DoubleValue(testRelError);
     347
     348          if (!Results.ContainsKey(BestSolutionTrainingRSquaredParameterName)) {
     349            Results.Add(new Result(BestSolutionTrainingRSquaredParameterName, BestSolutionTrainingRSquared));
     350            Results.Add(new Result(BestSolutionTestRSquaredParameterName, BestSolutionTestRSquared));
     351            Results.Add(new Result(BestSolutionTrainingMseParameterName, BestSolutionTrainingMse));
     352            Results.Add(new Result(BestSolutionTestMseParameterName, BestSolutionTestMse));
     353            Results.Add(new Result(BestSolutionTrainingRelativeErrorParameterName, BestSolutionTrainingRelativeError));
     354            Results.Add(new Result(BestSolutionTestRelativeErrorParameterName, BestSolutionTestRelativeError));
     355          } else {
     356            Results[BestSolutionTrainingRSquaredParameterName].Value = BestSolutionTrainingRSquared;
     357            Results[BestSolutionTestRSquaredParameterName].Value = BestSolutionTestRSquared;
     358            Results[BestSolutionTrainingMseParameterName].Value = BestSolutionTrainingMse;
     359            Results[BestSolutionTestMseParameterName].Value = BestSolutionTestMse;
     360            Results[BestSolutionTrainingRelativeErrorParameterName].Value = BestSolutionTrainingRelativeError;
     361            Results[BestSolutionTestRelativeErrorParameterName].Value = BestSolutionTestRelativeError;
     362          }
     363          #endregion
    239364        }
    240365
     
    244369        } else {
    245370          Results[BestSolutionQualityParameterName].Value = BestSolutionQuality;
     371          Results[BestSolutionParameterName].Value = BestSolution;
    246372        }
    247373      }
Note: See TracChangeset for help on using the changeset viewer.