Changeset 5717 for branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs
- Timestamp:
- 03/16/11 16:34:31 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs
r5699 r5717 34 34 private readonly ConstantTreeNode constantNode; 35 35 private readonly SymbolicExpressionTree tempTree; 36 37 public new SymbolicRegressionSolution Content { 38 get { return (SymbolicRegressionSolution)base.Content; } 39 set { base.Content = value; } 40 } 41 36 42 public InteractiveSymbolicRegressionSolutionSimplifierView() 37 43 : base() { … … 46 52 } 47 53 48 public new ISymbolicRegressionSolution Content { 49 get { return (ISymbolicRegressionSolution)base.Content; } 50 set { base.Content = value; } 54 protected override void UpdateModel(ISymbolicExpressionTree tree) { 55 Content.Model = new SymbolicRegressionModel(tree, Content.Model.Interpreter); 51 56 } 52 57 53 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolic DataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree tree, Dataset dataset, IEnumerable<int> rows) {58 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicExpressionTree tree) { 54 59 Dictionary<ISymbolicExpressionTreeNode, double> replacementValues = new Dictionary<ISymbolicExpressionTreeNode, double>(); 55 60 foreach (ISymbolicExpressionTreeNode node in tree.IterateNodesPrefix()) { 56 61 if (!(node.Symbol is ProgramRootSymbol || node.Symbol is StartSymbol)) { 57 replacementValues[node] = CalculateReplacementValue(node , interpreter, dataset, rows);62 replacementValues[node] = CalculateReplacementValue(node); 58 63 } 59 64 } … … 61 66 } 62 67 63 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree tree, Dataset dataset, IEnumerable<int> rows) { 68 protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateImpactValues(ISymbolicExpressionTree tree) { 69 var interpreter = Content.Model.Interpreter; 70 var dataset = Content.ProblemData.Dataset; 71 var rows = Content.ProblemData.TrainingIndizes; 72 string targetVariable = Content.ProblemData.TargetVariable; 64 73 Dictionary<ISymbolicExpressionTreeNode, double> impactValues = new Dictionary<ISymbolicExpressionTreeNode, double>(); 65 74 List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubTree(0).GetSubTree(0).IterateNodesPostfix().ToList(); 66 75 var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows) 67 76 .ToArray(); 77 var targetValues = dataset.GetEnumeratedVariableValues(targetVariable, rows); 78 79 double originalR2 = OnlinePearsonsRSquaredEvaluator.Calculate(targetValues, originalOutput); 68 80 69 81 foreach (ISymbolicExpressionTreeNode node in nodes) { 70 82 var parent = node.Parent; 71 constantNode.Value = CalculateReplacementValue(node , interpreter, dataset, rows);83 constantNode.Value = CalculateReplacementValue(node); 72 84 ISymbolicExpressionTreeNode replacementNode = constantNode; 73 85 SwitchNode(parent, node, replacementNode); 74 var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows).ToArray(); 86 var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows); 87 double newR2 = OnlinePearsonsRSquaredEvaluator.Calculate(targetValues, newOutput); 75 88 76 impactValues[node] = 1 - OnlinePearsonsRSquaredEvaluator.Calculate(originalOutput, newOutput); 89 // impact = 0 if no change 90 // impact < 0 if new solution is better 91 // impact > 0 if new solution is worse 92 impactValues[node] = originalR2 - newR2; 77 93 SwitchNode(parent, replacementNode, node); 78 94 } … … 80 96 } 81 97 82 private double CalculateReplacementValue(ISymbolicExpressionTreeNode node , ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, Dataset dataset, IEnumerable<int> rows) {98 private double CalculateReplacementValue(ISymbolicExpressionTreeNode node) { 83 99 var start = tempTree.Root.GetSubTree(0); 84 100 while (start.SubTrees.Count() > 0) start.RemoveSubTree(0); 85 101 start.AddSubTree((ISymbolicExpressionTreeNode)node.Clone()); 102 var interpreter = Content.Model.Interpreter; 103 var rows = Content.ProblemData.TrainingIndizes; 86 104 return interpreter.GetSymbolicExpressionTreeValues(tempTree, Content.ProblemData.Dataset, rows).Median(); 87 105 }
Note: See TracChangeset
for help on using the changeset viewer.