Changeset 7120 for branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective
- Timestamp:
- 12/05/11 08:22:36 (13 years ago)
- Location:
- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator.cs
r6802 r7120 22 22 23 23 using HeuristicLab.Common; 24 using HeuristicLab.Core; 25 using HeuristicLab.Data; 26 using HeuristicLab.Parameters; 24 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 25 28 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis { 26 29 public abstract class SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator : SymbolicDataAnalysisSingleObjectiveEvaluator<ITimeSeriesPrognosisProblemData>, ISymbolicTimeSeriesPrognosisSingleObjectiveEvaluator { 30 private const string HorizonParameterName = "Horizon"; 31 32 public IValueLookupParameter<IntValue> HorizonParameter { 33 get { return (IValueLookupParameter<IntValue>)Parameters[HorizonParameterName]; } 34 } 35 27 36 [StorableConstructor] 28 37 protected SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator(bool deserializing) : base(deserializing) { } … … 31 40 } 32 41 33 protected SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator() : base() { } 42 protected SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator() 43 : base() { 44 Parameters.Add(new ValueLookupParameter<IntValue>(HorizonParameterName, "The time interval for which the prognosis should be calculated.", new IntValue(1))); 45 } 34 46 } 35 47 } -
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveMeanSquaredErrorEvaluator.cs
r7100 r7120 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; … … 48 50 IEnumerable<int> rows = GenerateRowsToEvaluate(); 49 51 50 double quality = Calculate(SymbolicTimeSeriesPrognosisInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows); 52 double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, 53 solution, 54 EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, 55 ProblemDataParameter.ActualValue, 56 rows, HorizonParameter.ActualValue.Value); 51 57 QualityParameter.ActualValue = new DoubleValue(quality); 52 58 … … 54 60 } 55 61 56 public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) { 57 IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows); 58 OnlineMeanAndVarianceCalculator meanCalculator = new OnlineMeanAndVarianceCalculator(); 62 public static double Calculate(ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows, int horizon) { 63 var allPredictedContinuations = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, problemData.TargetVariables.ToArray(), rows, horizon); 64 var meanCalculator = new OnlineMeanAndVarianceCalculator(); 65 var allPredictedContinuationsEnumerator = allPredictedContinuations.GetEnumerator(); 59 66 foreach (var targetVariable in problemData.TargetVariables) { 60 IEnumerable<double> originalValues = problemData.Dataset.GetDoubleValues(targetVariable, rows); 61 IEnumerable<double> boundedEstimationValues = estimatedValues.LimitToRange(lowerEstimationLimit, 62 upperEstimationLimit); 63 OnlineCalculatorError errorState; 64 meanCalculator.Add(OnlineMeanSquaredErrorCalculator.Calculate(originalValues, boundedEstimationValues, out errorState)); 65 if (errorState != OnlineCalculatorError.None) return double.NaN; 67 if (!allPredictedContinuationsEnumerator.MoveNext()) throw new InvalidOperationException(); 68 var actualContinuations = from r in rows 69 select problemData.Dataset.GetDoubleValues(targetVariable, Enumerable.Range(r, horizon)); 70 var actualContinuationsEnumerator = actualContinuations.GetEnumerator(); 71 var predictedContinuationsEnumerator = allPredictedContinuationsEnumerator.Current.GetEnumerator(); 72 while (actualContinuationsEnumerator.MoveNext() & predictedContinuationsEnumerator.MoveNext()) { 73 OnlineCalculatorError errorState; 74 meanCalculator.Add(OnlineMeanSquaredErrorCalculator.Calculate(predictedContinuationsEnumerator.Current.LimitToRange(lowerEstimationLimit, upperEstimationLimit), 75 actualContinuationsEnumerator.Current, out errorState)); 76 if (errorState != OnlineCalculatorError.None) return double.NaN; 77 } 66 78 } 67 79 return meanCalculator.Mean; … … 69 81 70 82 public override double Evaluate(IExecutionContext context, ISymbolicExpressionTree tree, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) { 71 Symbolic TimeSeriesPrognosisInterpreterParameter.ExecutionContext = context;83 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context; 72 84 EstimationLimitsParameter.ExecutionContext = context; 85 HorizonParameter.ExecutionContext = context; 73 86 74 double mse = Calculate(Symbolic TimeSeriesPrognosisInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows);87 double mse = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows, HorizonParameter.ActualValue.Value); 75 88 76 77 Symbolic TimeSeriesPrognosisInterpreterParameter.ExecutionContext = null;89 HorizonParameter.ExecutionContext = null; 90 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null; 78 91 EstimationLimitsParameter.ExecutionContext = null; 79 92 -
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectivePearsonRSquaredEvaluator.cs
r7100 r7120 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; … … 48 50 IEnumerable<int> rows = GenerateRowsToEvaluate(); 49 51 50 double quality = Calculate(SymbolicTimeSeriesPrognosisInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows); 52 double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution, 53 EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, 54 ProblemDataParameter.ActualValue, 55 rows, HorizonParameter.ActualValue.Value); 51 56 QualityParameter.ActualValue = new DoubleValue(quality); 52 57 … … 54 59 } 55 60 56 public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) { 57 IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows); 61 public static double Calculate(ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows, int horizon) { 62 var allPredictedContinuations = 63 interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, problemData.TargetVariables.ToArray(), 64 rows, horizon).ToArray(); 65 58 66 var meanCalculator = new OnlineMeanAndVarianceCalculator(); 67 int i = 0; 59 68 foreach (var targetVariable in problemData.TargetVariables) { 60 IEnumerable<double> originalValues = problemData.Dataset.GetDoubleValues(targetVariable, rows); 69 var actualContinuations = from r in rows 70 select problemData.Dataset.GetDoubleValues(targetVariable, Enumerable.Range(r, horizon)); 71 var startValues = problemData.Dataset.GetDoubleValues(targetVariable, rows.Select(r => r - 1)); 61 72 OnlineCalculatorError errorState; 62 meanCalculator.Add(OnlinePearsonsRSquaredCalculator.Calculate(estimatedValues, originalValues, out errorState)); 63 if (errorState != OnlineCalculatorError.None) return 0.0; 73 meanCalculator.Add(OnlineTheilsUStatisticCalculator.Calculate( 74 startValues, 75 allPredictedContinuations.Select(v => v.ElementAt(i)), 76 actualContinuations, out errorState)); 77 if (errorState != OnlineCalculatorError.None) return double.NaN; 78 i++; 64 79 } 65 80 return meanCalculator.Mean; … … 67 82 68 83 public override double Evaluate(IExecutionContext context, ISymbolicExpressionTree tree, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) { 69 Symbolic TimeSeriesPrognosisInterpreterParameter.ExecutionContext = context;84 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context; 70 85 EstimationLimitsParameter.ExecutionContext = context; 86 HorizonParameter.ExecutionContext = context; 71 87 72 double r2 = Calculate(Symbolic TimeSeriesPrognosisInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows);88 double r2 = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows, HorizonParameter.ActualValue.Value); 73 89 74 SymbolicTimeSeriesPrognosisInterpreterParameter.ExecutionContext = null; 90 HorizonParameter.ExecutionContext = null; 91 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null; 75 92 EstimationLimitsParameter.ExecutionContext = null; 76 93 -
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveProblem.cs
r7100 r7120 31 31 [Creatable("Problems")] 32 32 public class SymbolicTimeSeriesPrognosisSingleObjectiveProblem : SymbolicDataAnalysisSingleObjectiveProblem<ITimeSeriesPrognosisProblemData, ISymbolicTimeSeriesPrognosisSingleObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, ITimeSeriesPrognosisProblem { 33 private const double PunishmentFactor = 10;34 33 private const int InitialMaximumTreeDepth = 8; 35 34 private const int InitialMaximumTreeLength = 25; -
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveTrainingBestSolutionAnalyzer.cs
r7100 r7120 20 20 #endregion 21 21 22 using System.Linq; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; … … 34 35 [StorableClass] 35 36 public sealed class SymbolicTimeSeriesPrognosisSingleObjectiveTrainingBestSolutionAnalyzer : SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer<ISymbolicTimeSeriesPrognosisSolution>, 36 ISymbolic TimeSeriesPrognosisInterpreterOperator, ISymbolicDataAnalysisBoundedOperator {37 ISymbolicDataAnalysisInterpreterOperator, ISymbolicDataAnalysisBoundedOperator { 37 38 private const string ProblemDataParameterName = "ProblemData"; 38 private const string Symbolic TimeSeriesPrognosisInterpreterParameterName = "SymbolicTimeSeriesPrognosisInterpreter";39 private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicDataAnalysisTreeInterpreter"; 39 40 private const string EstimationLimitsParameterName = "EstimationLimits"; 40 41 private const string ApplyLinearScalingParameterName = "ApplyLinearScaling"; … … 43 44 get { return (ILookupParameter<ITimeSeriesPrognosisProblemData>)Parameters[ProblemDataParameterName]; } 44 45 } 45 public ILookupParameter<ISymbolic TimeSeriesPrognosisInterpreter> SymbolicTimeSeriesPrognosisInterpreterParameter {46 get { return (ILookupParameter<ISymbolic TimeSeriesPrognosisInterpreter>)Parameters[SymbolicTimeSeriesPrognosisInterpreterParameterName]; }46 public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter { 47 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; } 47 48 } 48 49 public IValueLookupParameter<DoubleLimit> EstimationLimitsParameter { … … 66 67 : base() { 67 68 Parameters.Add(new LookupParameter<ITimeSeriesPrognosisProblemData>(ProblemDataParameterName, "The problem data for the symbolic regression solution.")); 68 Parameters.Add(new LookupParameter<ISymbolic TimeSeriesPrognosisInterpreter>(SymbolicTimeSeriesPrognosisInterpreterParameterName, "The symbolic time series prognosis interpreter for the symbolic expression tree."));69 Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The symbolic time series prognosis interpreter for the symbolic expression tree.")); 69 70 Parameters.Add(new ValueLookupParameter<DoubleLimit>(EstimationLimitsParameterName, "The lower and upper limit for the estimated values produced by the symbolic regression model.")); 70 71 Parameters.Add(new ValueParameter<BoolValue>(ApplyLinearScalingParameterName, "Flag that indicates if the produced symbolic regression solution should be linearly scaled.", new BoolValue(true))); … … 75 76 76 77 protected override ISymbolicTimeSeriesPrognosisSolution CreateSolution(ISymbolicExpressionTree bestTree, double bestQuality) { 77 var model = new SymbolicTimeSeriesPrognosisModel((ISymbolicExpressionTree)bestTree.Clone(), Symbolic TimeSeriesPrognosisInterpreterParameter.ActualValue);78 var model = new SymbolicTimeSeriesPrognosisModel((ISymbolicExpressionTree)bestTree.Clone(), SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, ProblemDataParameter.ActualValue.TargetVariables.ToArray()); 78 79 if (ApplyLinearScaling.Value) 79 80 SymbolicTimeSeriesPrognosisModel.Scale(model, ProblemDataParameter.ActualValue);
Note: See TracChangeset
for help on using the changeset viewer.