Changeset 7154 for branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4
- Timestamp:
- 12/07/11 22:47:12 (13 years ago)
- Location:
- branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveMeanSquaredErrorEvaluator.cs
r7129 r7154 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Drawing.Printing; 24 25 using System.Linq; 25 26 using HeuristicLab.Common; … … 65 66 DetermineScalingFactors(solution, problemData, interpreter, rows, out alpha, out beta); 66 67 var scaledSolution = Scale(solution, alpha, beta); 67 68 string[] targetVariables = problemData.TargetVariables.ToArray(); 68 69 var meanSquaredErrorCalculators = Enumerable.Range(0, problemData.TargetVariables.Count()) 69 70 .Select(i => new OnlineMeanSquaredErrorCalculator()).ToArray(); 70 71 71 var allPredictedContinuations = interpreter.GetSymbolicExpressionTreeValues(scaledSolution, problemData.Dataset, 72 problemData.TargetVariables.ToArray(), 73 rows, horizon); 74 var allContinuationsEnumerator = allPredictedContinuations.GetEnumerator(); 75 var rowsEnumerator = rows.GetEnumerator(); 76 while (allContinuationsEnumerator.MoveNext() & rowsEnumerator.MoveNext()) { 77 var componentEnumerator = allContinuationsEnumerator.Current.GetEnumerator(); 78 var mseCalculatorsEnumerator = meanSquaredErrorCalculators.AsEnumerable().GetEnumerator(); 79 var targetVarEnumerator = problemData.TargetVariables.GetEnumerator(); 80 while (componentEnumerator.MoveNext() & mseCalculatorsEnumerator.MoveNext() & targetVarEnumerator.MoveNext()) { 81 var stepEnumerator = componentEnumerator.Current.GetEnumerator(); 82 var actualContinuationEnumerator = problemData.Dataset.GetDoubleValues(targetVarEnumerator.Current, 83 Enumerable.Range(rowsEnumerator.Current, horizon)).GetEnumerator(); 84 while (stepEnumerator.MoveNext() & actualContinuationEnumerator.MoveNext()) { 85 double e = Math.Min(upperEstimationLimit, Math.Max(lowerEstimationLimit, stepEnumerator.Current)); 86 mseCalculatorsEnumerator.Current.Add(actualContinuationEnumerator.Current, e); 87 if (mseCalculatorsEnumerator.Current.ErrorState == OnlineCalculatorError.InvalidValueAdded) 88 return double.NaN; 72 var allContinuationsEnumerator = interpreter.GetSymbolicExpressionTreeValues(scaledSolution, problemData.Dataset, 73 targetVariables, 74 rows, horizon).GetEnumerator(); 75 allContinuationsEnumerator.MoveNext(); 76 // foreach row 77 foreach (var row in rows) { 78 // foreach horizon 79 for (int h = 0; h < horizon; h++) { 80 // foreach component 81 for (int i = 0; i < meanSquaredErrorCalculators.Length; i++) { 82 double e = Math.Min(upperEstimationLimit, Math.Max(lowerEstimationLimit, allContinuationsEnumerator.Current)); 83 meanSquaredErrorCalculators[i].Add(problemData.Dataset.GetDoubleValue(targetVariables[i], row + h), e); 84 if (meanSquaredErrorCalculators[i].ErrorState == OnlineCalculatorError.InvalidValueAdded) 85 return double.MaxValue; 86 allContinuationsEnumerator.MoveNext(); 89 87 } 90 88 } … … 92 90 var meanCalculator = new OnlineMeanAndVarianceCalculator(); 93 91 foreach (var calc in meanSquaredErrorCalculators) { 94 if (calc.ErrorState != OnlineCalculatorError.None) return double. NaN;92 if (calc.ErrorState != OnlineCalculatorError.None) return double.MaxValue; 95 93 meanCalculator.Add(calc.MeanSquaredError); 96 94 } … … 109 107 // } 110 108 //} 111 return meanCalculator.MeanErrorState == OnlineCalculatorError.None ? meanCalculator.Mean : double. NaN;109 return meanCalculator.MeanErrorState == OnlineCalculatorError.None ? meanCalculator.Mean : double.MaxValue; 112 110 } 113 111 … … 153 151 alpha = new double[nComponents]; 154 152 beta = new double[nComponents]; 155 var oneStepPredictions = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, 156 targetVariables, rows, 157 1); 153 var oneStepPredictionsEnumerator = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, targetVariables, rows).GetEnumerator(); 154 var scalingParameterCalculators = 155 Enumerable.Repeat(0, nComponents).Select(x => new OnlineLinearScalingParameterCalculator()).ToArray(); 156 var targetValues = problemData.Dataset.GetVectorEnumerable(targetVariables, rows); 157 var targetValueEnumerator = targetValues.GetEnumerator(); 158 159 var more = oneStepPredictionsEnumerator.MoveNext() & targetValueEnumerator.MoveNext(); 160 while (more) { 161 for (int i = 0; i < nComponents; i++) { 162 scalingParameterCalculators[i].Add(oneStepPredictionsEnumerator.Current, targetValueEnumerator.Current); 163 more = oneStepPredictionsEnumerator.MoveNext() & targetValueEnumerator.MoveNext(); 164 } 165 } 166 158 167 for (int i = 0; i < nComponents; i++) { 159 var target = problemData.Dataset.GetDoubleValues(targetVariables[i], rows); 160 var prediction = oneStepPredictions.Select(v => v.ElementAt(i).First()); 161 OnlineCalculatorError errorState; 162 OnlineLinearScalingParameterCalculator.Calculate(prediction, target, out alpha[i], out beta[i], out errorState); 163 if (errorState != OnlineCalculatorError.None) { 164 alpha[i] = 0; 165 beta[i] = 1; 168 if (scalingParameterCalculators[i].ErrorState == OnlineCalculatorError.None) { 169 alpha[i] = scalingParameterCalculators[i].Alpha; 170 beta[i] = scalingParameterCalculators[i].Beta; 171 } else { 172 alpha[i] = 0.0; 173 beta[i] = 1.0; 166 174 } 167 175 } -
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveProblem.cs
r7129 r7154 57 57 EstimationLimitsParameter.Hidden = true; 58 58 59 Maximization.Value = true;59 Maximization.Value = false; 60 60 MaximumSymbolicExpressionTreeDepth.Value = InitialMaximumTreeDepth; 61 61 MaximumSymbolicExpressionTreeLength.Value = InitialMaximumTreeLength; … … 106 106 op.EstimationLimitsParameter.ActualName = EstimationLimitsParameter.Name; 107 107 } 108 foreach (var op in operators.OfType<SymbolicTimeSeriesPrognosisSingleObjectiveTrainingBestSolutionAnalyzer>()) 109 { 110 op.MaximizationParameter.ActualName = MaximizationParameter.Name; 111 op.ProblemDataParameter.ActualName = ProblemDataParameter.Name; 112 op.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName; 113 op.SymbolicDataAnalysisTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name; 114 op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 115 } 108 116 } 109 117 } -
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SymbolicTimeSeriesPrognosisModel.cs
r7129 r7154 20 20 #endregion 21 21 22 using System; 22 23 using System.Collections.Generic; 23 24 using System.Drawing; … … 69 70 this.symbolicExpressionTree = cloner.Clone(original.symbolicExpressionTree); 70 71 this.interpreter = cloner.Clone(original.interpreter); 72 this.targetVariables = new string[original.targetVariables.Length]; 73 Array.Copy(original.targetVariables, this.targetVariables, this.targetVariables.Length); 71 74 } 72 75 public SymbolicTimeSeriesPrognosisModel(ISymbolicExpressionTree tree, ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter, IEnumerable<string> targetVariables) … … 83 86 84 87 public IEnumerable<IEnumerable<IEnumerable<double>>> GetPrognosedValues(Dataset dataset, IEnumerable<int> rows, int horizon) { 85 return Interpreter.GetSymbolicExpressionTreeValues(SymbolicExpressionTree, dataset, targetVariables, rows, horizon); 88 var enumerator = 89 Interpreter.GetSymbolicExpressionTreeValues(SymbolicExpressionTree, dataset, targetVariables, rows, horizon). 90 GetEnumerator(); 91 foreach (var r in rows) { 92 var l = new List<double[]>(); 93 for (int h = 0; h < horizon; h++) { 94 double[] components = new double[targetVariables.Length]; 95 for (int c = 0; c < components.Length; c++) { 96 enumerator.MoveNext(); 97 components[c] = enumerator.Current; 98 } 99 l.Add(components); 100 } 101 yield return l; 102 } 86 103 } 87 104 … … 95 112 public static void Scale(SymbolicTimeSeriesPrognosisModel model, ITimeSeriesPrognosisProblemData problemData) { 96 113 var dataset = problemData.Dataset; 97 var targetVariables = problemData.TargetVariables ;114 var targetVariables = problemData.TargetVariables.ToArray(); 98 115 var rows = problemData.TrainingIndizes; 99 int i = 0; 100 int horizon = 1; 101 var estimatedValues = model.Interpreter.GetSymbolicExpressionTreeValues(model.SymbolicExpressionTree, dataset, problemData.TargetVariables.ToArray(), rows, horizon) 102 .ToArray(); 103 foreach (var targetVariable in targetVariables) { 104 var targetValues = dataset.GetDoubleValues(targetVariable, rows); 105 double alpha; 106 double beta; 107 OnlineCalculatorError errorState; 108 OnlineLinearScalingParameterCalculator.Calculate(estimatedValues.Select(x => x.ElementAt(i).First()), targetValues, 109 out alpha, out beta, out errorState); 110 if (errorState != OnlineCalculatorError.None) continue; 116 var estimatedValuesEnumerator = model.Interpreter.GetSymbolicExpressionTreeValues(model.SymbolicExpressionTree, dataset, 117 targetVariables, 118 rows).GetEnumerator(); 119 var scalingParameterCalculators = 120 problemData.TargetVariables.Select(v => new OnlineLinearScalingParameterCalculator()).ToArray(); 121 var targetValuesEnumerator = problemData.Dataset.GetVectorEnumerable(targetVariables, rows).GetEnumerator(); 111 122 123 var more = targetValuesEnumerator.MoveNext() & estimatedValuesEnumerator.MoveNext(); 124 // foreach row 125 while (more) { 126 // foreach component 127 for (int i = 0; i < targetVariables.Length; i++) { 128 scalingParameterCalculators[i].Add(estimatedValuesEnumerator.Current, targetValuesEnumerator.Current); 129 more = estimatedValuesEnumerator.MoveNext() & targetValuesEnumerator.MoveNext(); 130 } 131 } 132 133 for (int i = 0; i < targetVariables.Count(); i++) { 134 if (scalingParameterCalculators[i].ErrorState != OnlineCalculatorError.None) continue; 135 double alpha = scalingParameterCalculators[i].Alpha; 136 double beta = scalingParameterCalculators[i].Beta; 112 137 ConstantTreeNode alphaTreeNode = null; 113 138 ConstantTreeNode betaTreeNode = null; … … 136 161 startNode.InsertSubtree(i, scaledMainBranch); 137 162 } 138 i++;139 163 } // foreach 140 164 }
Note: See TracChangeset
for help on using the changeset viewer.