Changeset 7672 for trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator.cs
- Timestamp:
- 03/30/12 10:21:21 (13 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator.cs
r7670 r7672 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 24 using System.Linq; 23 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Core; … … 31 33 [StorableClass] 32 34 public class SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator : SymbolicRegressionSingleObjectiveEvaluator { 35 public override bool Maximization { get { return false; } } 36 [ThreadStatic] 37 private static double[] estimatedValuesCache; 38 33 39 [StorableConstructor] 34 40 protected SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator(bool deserializing) : base(deserializing) { } … … 39 45 return new SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator(this, cloner); 40 46 } 41 42 47 public SymbolicRegressionSingleObjectiveMeanSquaredErrorEvaluator() : base() { } 43 44 public override bool Maximization { get { return false; } }45 48 46 49 public override IOperation Apply() { … … 48 51 IEnumerable<int> rows = GenerateRowsToEvaluate(); 49 52 50 double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows );53 double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows, ApplyLinearScaling); 51 54 QualityParameter.ActualValue = new DoubleValue(quality); 52 55 … … 54 57 } 55 58 56 public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, IRegressionProblemData problemData, IEnumerable<int> rows ) {59 public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling) { 57 60 IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows); 58 61 IEnumerable<double> originalValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 59 IEnumerable<double> boundedEstimat ionValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit);62 IEnumerable<double> boundedEstimatedValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit); 60 63 OnlineCalculatorError errorState; 61 double mse = OnlineMeanSquaredErrorCalculator.Calculate(originalValues, boundedEstimationValues, out errorState); 62 if (errorState != OnlineCalculatorError.None) return double.NaN; 64 65 double mse; 66 if (applyLinearScaling) { 67 //int i = 0; 68 //int rowCount = rows.Count(); 69 //if (estimatedValuesCache == null) estimatedValuesCache = new double[problemData.Dataset.Rows]; 70 //foreach (var value in boundedEstimatedValues) { 71 // estimatedValuesCache[i] = value; 72 // i++; 73 //} 74 75 double alpha, beta; 76 OnlineLinearScalingParameterCalculator.Calculate(boundedEstimatedValues, originalValues, out alpha, out beta, out errorState); 77 mse = OnlineMeanSquaredErrorCalculator.Calculate(originalValues, boundedEstimatedValues.Select(value => value * beta + alpha), out errorState); 78 } else 79 mse = OnlineMeanSquaredErrorCalculator.Calculate(originalValues, boundedEstimatedValues, out errorState); 80 81 if (errorState != OnlineCalculatorError.None) return Double.NaN; 63 82 else return mse; 64 83 } … … 68 87 EstimationLimitsParameter.ExecutionContext = context; 69 88 70 double mse = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows); 71 89 double mse = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows, ApplyLinearScaling); 72 90 73 91 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
Note: See TracChangeset
for help on using the changeset viewer.