Changeset 11883 for branches/DataAnalysis.ComplexityAnalyzer/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveTrainingBestSolutionAnalyzer.cs
- Timestamp:
- 02/04/15 11:16:41 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis.ComplexityAnalyzer/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/MultiObjective/SymbolicRegressionMultiObjectiveTrainingBestSolutionAnalyzer.cs
r11310 r11883 109 109 } 110 110 111 var problemData = ProblemDataParameter.ActualValue;112 var constantValue = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, problemData.TrainingIndices).Average();113 var constantSolution = CreateConstantSymbolicRegressionSolution(constantValue);114 111 115 int previousTreeLength = constantSolution.Model.SymbolicExpressionTree.Length;112 int previousTreeLength = -1; 116 113 var sizeParetoFront = new LinkedList<ISymbolicRegressionSolution>(); 117 sizeParetoFront.AddLast(constantSolution);118 119 114 foreach (var solution in paretoFront.OrderBy(s => s.Model.SymbolicExpressionTree.Length)) { 120 115 int treeLength = solution.Model.SymbolicExpressionTree.Length; … … 136 131 qualityToTreeSize.Rows.Add(testRow); 137 132 138 double training HyperVolume, testHyperVolume;139 CalculateNormalizedHyperVolume(sizeParetoFront, out trainingHyperVolume, out testHyperVolume);133 double trainingArea = sizeParetoFront.Select(s => s.Model.SymbolicExpressionTree.Length * s.TrainingNormalizedMeanSquaredError).Average(); 134 double testArea = sizeParetoFront.Select(s => s.Model.SymbolicExpressionTree.Length * s.TestNormalizedMeanSquaredError).Average(); 140 135 141 DoubleValue trainingHyperVolumeResult, testHyperVolumeResult;142 if (!ResultCollection.TryGetValue(" HyperVolume training", out result)) {143 trainingHyperVolumeResult = new DoubleValue();144 ResultCollection.Add(new Result(" HyperVolume training", trainingHyperVolumeResult));145 } else trainingHyperVolumeResult = (DoubleValue)result.Value;136 ResultCollection paretoFrontResults; 137 if (!ResultCollection.TryGetValue("Pareto Front Results", out result)) { 138 paretoFrontResults = new ResultCollection(); 139 ResultCollection.Add(new Result("Pareto Front Results", paretoFrontResults)); 140 } else paretoFrontResults = (ResultCollection)result.Value; 146 141 147 if (!ResultCollection.TryGetValue("HyperVolume test", out result)) { 148 testHyperVolumeResult = new DoubleValue(); 149 ResultCollection.Add(new Result("HyperVolume test", testHyperVolumeResult)); 150 } else testHyperVolumeResult = (DoubleValue)result.Value; 142 DoubleValue trainingAreaResult, testAreaResult, areaDifferenceResult, avgTrainingNMSE, avgTestNMSE; 143 if (!paretoFrontResults.TryGetValue("Non Dominated Area (training)", out result)) { 144 trainingAreaResult = new DoubleValue(); 145 paretoFrontResults.Add(new Result("Non Dominated Area (training)", trainingAreaResult)); 146 } else trainingAreaResult = (DoubleValue)result.Value; 147 if (!paretoFrontResults.TryGetValue("Non Dominated Area (test)", out result)) { 148 testAreaResult = new DoubleValue(); 149 paretoFrontResults.Add(new Result("Non Dominated Area (test)", testAreaResult)); 150 } else testAreaResult = (DoubleValue)result.Value; 151 if (!paretoFrontResults.TryGetValue("Non Dominated Area Difference", out result)) { 152 areaDifferenceResult = new DoubleValue(); 153 paretoFrontResults.Add(new Result("Non Dominated Area Difference", areaDifferenceResult)); 154 } else areaDifferenceResult = (DoubleValue)result.Value; 155 if (!paretoFrontResults.TryGetValue("Average Training NMSE", out result)) { 156 avgTrainingNMSE = new DoubleValue(); 157 paretoFrontResults.Add(new Result("Average Training NMSE", avgTrainingNMSE)); 158 } else avgTrainingNMSE = (DoubleValue)result.Value; 159 if (!paretoFrontResults.TryGetValue("Average Test NMSE", out result)) { 160 avgTestNMSE = new DoubleValue(); 161 paretoFrontResults.Add(new Result("Average Test NMSE", avgTestNMSE)); 162 } else avgTestNMSE = (DoubleValue)result.Value; 151 163 152 trainingHyperVolumeResult.Value = trainingHyperVolume; 153 testHyperVolumeResult.Value = testHyperVolume; 164 trainingAreaResult.Value = trainingArea; 165 testAreaResult.Value = testArea; 166 areaDifferenceResult.Value = trainingArea - testArea; 167 avgTrainingNMSE.Value = sizeParetoFront.Select(s => s.TrainingNormalizedMeanSquaredError).Average(); 168 avgTestNMSE.Value = sizeParetoFront.Select(s => s.TestNormalizedMeanSquaredError).Average(); 154 169 155 170 return operation; 156 171 } 157 172 158 private void CalculateNormalizedHyperVolume(IEnumerable<ISymbolicRegressionSolution> solutions, out double trainingHyperVolume, out double testHyperVolume) {159 trainingHyperVolume = 0.0;160 testHyperVolume = 0.0;161 162 var prevX = 0;163 var prevYTraining = 1.0;164 var prevYTest = 1.0;165 var treeSize = 0;166 167 foreach (var solution in solutions) {168 treeSize = solution.Model.SymbolicExpressionTree.Length;169 trainingHyperVolume += (prevYTraining + solution.TrainingNormalizedMeanSquaredError) * (treeSize - prevX) / 2;170 testHyperVolume += (prevYTest + solution.TestNormalizedMeanSquaredError) * (treeSize - prevX) / 2;171 prevX = treeSize;172 prevYTraining = solution.TrainingNormalizedMeanSquaredError;173 prevYTest = solution.TestNormalizedMeanSquaredError;174 }175 176 trainingHyperVolume = trainingHyperVolume / treeSize;177 testHyperVolume = testHyperVolume / treeSize;178 }179 180 private ISymbolicRegressionSolution CreateConstantSymbolicRegressionSolution(double constantValue) {181 var grammar = new ArithmeticExpressionGrammar();182 var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();183 var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();184 var constantTreeNode = new ConstantTreeNode(new Constant()) { Value = constantValue };185 rootNode.AddSubtree(startNode);186 startNode.AddSubtree(constantTreeNode);187 var tree = new SymbolicExpressionTree();188 tree.Root = rootNode;189 190 var model = new SymbolicRegressionModel(tree, SymbolicDataAnalysisTreeInterpreterParameter.ActualValue);191 var solution = new SymbolicRegressionSolution(model, ProblemDataParameter.ActualValue);192 return solution;193 }194 173 } 195 174 }
Note: See TracChangeset
for help on using the changeset viewer.