Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/17/11 15:14:45 (13 years ago)
Author:
gkronber
Message:

#1418 implemented linear scaling for classification solutions, fixed bugs interactive simplifier view for classification solutions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/InteractiveSymbolicDiscriminantFunctionClassificationSolutionSimplifierView.cs

    r5717 r5736  
    4848      ISymbolicExpressionTreeNode root = new ProgramRootSymbol().CreateTreeNode();
    4949      ISymbolicExpressionTreeNode start = new StartSymbol().CreateTreeNode();
    50       root.AddSubTree(start);
     50      root.AddSubtree(start);
    5151      tempTree = new SymbolicExpressionTree(root);
    5252    }
    5353
    5454    protected override void UpdateModel(ISymbolicExpressionTree tree) {
    55       var dataset = Content.ProblemData.Dataset;
    56       var interpreter = Content.Model.Interpreter;
    57       var rows = Content.ProblemData.TrainingIndizes;
    58       string targetVariable = Content.ProblemData.TargetVariable;
    59 
    60       var targetClassValues = dataset.GetEnumeratedVariableValues(targetVariable, rows);
    61       var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows)
    62         .ToArray();
    63       double[] classValues;
    64       double[] thresholds;
    65       NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(Content.ProblemData, originalOutput, targetClassValues, out classValues, out thresholds);
    66       Content.Model = new SymbolicDiscriminantFunctionClassificationModel(tree, Content.Model.Interpreter, classValues, thresholds);
     55      Content.Model = new SymbolicDiscriminantFunctionClassificationModel(tree, Content.Model.Interpreter);
     56      Content.SetClassDistibutionCutPointThresholds();
    6757    }
    6858
     
    8373      string targetVariable = Content.ProblemData.TargetVariable;
    8474      Dictionary<ISymbolicExpressionTreeNode, double> impactValues = new Dictionary<ISymbolicExpressionTreeNode, double>();
    85       List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubTree(0).GetSubTree(0).IterateNodesPostfix().ToList();
     75      List<ISymbolicExpressionTreeNode> nodes = tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPostfix().ToList();
    8676
    8777      var targetClassValues = dataset.GetEnumeratedVariableValues(targetVariable, rows);
    8878      var originalOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows)
     79        .LimitToRange(Content.Model.LowerEstimationLimit, Content.Model.UpperEstimationLimit)
    8980        .ToArray();
    9081      double[] classValues;
    9182      double[] thresholds;
    9283      NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(Content.ProblemData, originalOutput, targetClassValues, out classValues, out thresholds);
    93       var classifier = new SymbolicDiscriminantFunctionClassificationModel(tree, interpreter, classValues, thresholds);
     84      var classifier = new SymbolicDiscriminantFunctionClassificationModel(tree, interpreter);
     85      classifier.SetThresholdsAndClassValues(thresholds, classValues);
    9486      double originalAccuracy = OnlineAccuracyEvaluator.Calculate(targetClassValues, classifier.GetEstimatedClassValues(dataset, rows));
    9587
     
    9991        ISymbolicExpressionTreeNode replacementNode = constantNode;
    10092        SwitchNode(parent, node, replacementNode);
    101         var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows);
     93        var newOutput = interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows)
     94          .LimitToRange(Content.Model.LowerEstimationLimit, Content.Model.UpperEstimationLimit)
     95          .ToArray();
    10296        NormalDistributionCutPointsThresholdCalculator.CalculateThresholds(Content.ProblemData, newOutput, targetClassValues, out classValues, out thresholds);
    103         classifier = new SymbolicDiscriminantFunctionClassificationModel(tree, interpreter, classValues, thresholds);
     97        classifier = new SymbolicDiscriminantFunctionClassificationModel(tree, interpreter);
     98        classifier.SetThresholdsAndClassValues(thresholds, classValues);
    10499        double newAccuracy = OnlineAccuracyEvaluator.Calculate(targetClassValues, classifier.GetEstimatedClassValues(dataset, rows));
    105100
     
    114109
    115110    private double CalculateReplacementValue(ISymbolicExpressionTreeNode node) {
    116       var start = tempTree.Root.GetSubTree(0);
    117       while (start.SubTrees.Count() > 0) start.RemoveSubTree(0);
    118       start.AddSubTree((ISymbolicExpressionTreeNode)node.Clone());
     111      var start = tempTree.Root.GetSubtree(0);
     112      while (start.SubtreesCount > 0) start.RemoveSubtree(0);
     113      start.AddSubtree((ISymbolicExpressionTreeNode)node.Clone());
    119114      var interpreter = Content.Model.Interpreter;
    120115      var rows = Content.ProblemData.TrainingIndizes;
     
    124119
    125120    private void SwitchNode(ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode oldBranch, ISymbolicExpressionTreeNode newBranch) {
    126       for (int i = 0; i < root.SubTrees.Count(); i++) {
    127         if (root.GetSubTree(i) == oldBranch) {
    128           root.RemoveSubTree(i);
    129           root.InsertSubTree(i, newBranch);
     121      for (int i = 0; i < root.SubtreesCount; i++) {
     122        if (root.GetSubtree(i) == oldBranch) {
     123          root.RemoveSubtree(i);
     124          root.InsertSubtree(i, newBranch);
    130125          return;
    131126        }
Note: See TracChangeset for help on using the changeset viewer.