Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/16/11 16:34:31 (13 years ago)
Author:
gkronber
Message:

#1418 Implemented interactive simplifier views for symbolic classification and regression.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs

    r5699 r5717  
    3434    private readonly ConstantTreeNode constantNode;
    3535    private readonly SymbolicExpressionTree tempTree;
     36
     37    public new SymbolicRegressionSolution Content {
     38      get { return (SymbolicRegressionSolution)base.Content; }
     39      set { base.Content = value; }
     40    }
     41
    3642    public InteractiveSymbolicRegressionSolutionSimplifierView()
    3743      : base() {
     
    4652    }
    4753
    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);
    5156    }
    5257
    53     protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree tree, Dataset dataset, IEnumerable<int> rows) {
     58    protected override Dictionary<ISymbolicExpressionTreeNode, double> CalculateReplacementValues(ISymbolicExpressionTree tree) {
    5459      Dictionary<ISymbolicExpressionTreeNode, double> replacementValues = new Dictionary<ISymbolicExpressionTreeNode, double>();
    5560      foreach (ISymbolicExpressionTreeNode node in tree.IterateNodesPrefix()) {
    5661        if (!(node.Symbol is ProgramRootSymbol || node.Symbol is StartSymbol)) {
    57           replacementValues[node] = CalculateReplacementValue(node, interpreter, dataset, rows);
     62          replacementValues[node] = CalculateReplacementValue(node);
    5863        }
    5964      }
     
    6166    }
    6267
    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;
    6473      Dictionary<ISymbolicExpressionTreeNode, double> impactValues = new Dictionary<ISymbolicExpressionTreeNode, double>();
    6574      List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubTree(0).GetSubTree(0).IterateNodesPostfix().ToList();
    6675      var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows)
    6776        .ToArray();
     77      var targetValues = dataset.GetEnumeratedVariableValues(targetVariable, rows);
     78
     79      double originalR2 = OnlinePearsonsRSquaredEvaluator.Calculate(targetValues, originalOutput);
    6880
    6981      foreach (ISymbolicExpressionTreeNode node in nodes) {
    7082        var parent = node.Parent;
    71         constantNode.Value = CalculateReplacementValue(node, interpreter, dataset, rows);
     83        constantNode.Value = CalculateReplacementValue(node);
    7284        ISymbolicExpressionTreeNode replacementNode = constantNode;
    7385        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);
    7588
    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;
    7793        SwitchNode(parent, replacementNode, node);
    7894      }
     
    8096    }
    8197
    82     private double CalculateReplacementValue(ISymbolicExpressionTreeNode node, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, Dataset dataset, IEnumerable<int> rows) {
     98    private double CalculateReplacementValue(ISymbolicExpressionTreeNode node) {
    8399      var start = tempTree.Root.GetSubTree(0);
    84100      while (start.SubTrees.Count() > 0) start.RemoveSubTree(0);
    85101      start.AddSubTree((ISymbolicExpressionTreeNode)node.Clone());
     102      var interpreter = Content.Model.Interpreter;
     103      var rows = Content.ProblemData.TrainingIndizes;
    86104      return interpreter.GetSymbolicExpressionTreeValues(tempTree, Content.ProblemData.Dataset, rows).Median();
    87105    }
Note: See TracChangeset for help on using the changeset viewer.