Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/17/12 11:18:40 (12 years ago)
Author:
mkommend
Message:

#1951:

  • Added linear scaling parameter to data analysis problems.
  • Adapted interfaces, evaluators and analyzers accordingly.
  • Added OnlineBoundedMeanSquaredErrorCalculator.
  • Adapted symbolic regression sample unit test.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationModel.cs

    r8623 r8664  
    6262      return CreateClassificationSolution(problemData);
    6363    }
    64 
    65     #region scaling
    66     public static void Scale(ISymbolicClassificationModel model, IClassificationProblemData problemData) {
    67       var dataset = problemData.Dataset;
    68       var targetVariable = problemData.TargetVariable;
    69       var rows = problemData.TrainingIndices;
    70       var estimatedValues = model.Interpreter.GetSymbolicExpressionTreeValues(model.SymbolicExpressionTree, dataset, rows);
    71       var targetValues = dataset.GetDoubleValues(targetVariable, rows);
    72       double alpha;
    73       double beta;
    74       OnlineCalculatorError errorState;
    75       OnlineLinearScalingParameterCalculator.Calculate(estimatedValues, targetValues, out alpha, out beta, out errorState);
    76       if (errorState != OnlineCalculatorError.None) return;
    77 
    78       ConstantTreeNode alphaTreeNode = null;
    79       ConstantTreeNode betaTreeNode = null;
    80       // check if model has been scaled previously by analyzing the structure of the tree
    81       var startNode = model.SymbolicExpressionTree.Root.GetSubtree(0);
    82       if (startNode.GetSubtree(0).Symbol is Addition) {
    83         var addNode = startNode.GetSubtree(0);
    84         if (addNode.SubtreeCount == 2 && addNode.GetSubtree(0).Symbol is Multiplication && addNode.GetSubtree(1).Symbol is Constant) {
    85           alphaTreeNode = addNode.GetSubtree(1) as ConstantTreeNode;
    86           var mulNode = addNode.GetSubtree(0);
    87           if (mulNode.SubtreeCount == 2 && mulNode.GetSubtree(1).Symbol is Constant) {
    88             betaTreeNode = mulNode.GetSubtree(1) as ConstantTreeNode;
    89           }
    90         }
    91       }
    92       // if tree structure matches the structure necessary for linear scaling then reuse the existing tree nodes
    93       if (alphaTreeNode != null && betaTreeNode != null) {
    94         betaTreeNode.Value *= beta;
    95         alphaTreeNode.Value *= beta;
    96         alphaTreeNode.Value += alpha;
    97       } else {
    98         var mainBranch = startNode.GetSubtree(0);
    99         startNode.RemoveSubtree(0);
    100         var scaledMainBranch = MakeSum(MakeProduct(mainBranch, beta), alpha);
    101         startNode.AddSubtree(scaledMainBranch);
    102       }
    103     }
    104 
    105     private static ISymbolicExpressionTreeNode MakeSum(ISymbolicExpressionTreeNode treeNode, double alpha) {
    106       if (alpha.IsAlmost(0.0)) {
    107         return treeNode;
    108       } else {
    109         var addition = new Addition();
    110         var node = addition.CreateTreeNode();
    111         var alphaConst = MakeConstant(alpha);
    112         node.AddSubtree(treeNode);
    113         node.AddSubtree(alphaConst);
    114         return node;
    115       }
    116     }
    117 
    118     private static ISymbolicExpressionTreeNode MakeProduct(ISymbolicExpressionTreeNode treeNode, double beta) {
    119       if (beta.IsAlmost(1.0)) {
    120         return treeNode;
    121       } else {
    122         var multipliciation = new Multiplication();
    123         var node = multipliciation.CreateTreeNode();
    124         var betaConst = MakeConstant(beta);
    125         node.AddSubtree(treeNode);
    126         node.AddSubtree(betaConst);
    127         return node;
    128       }
    129     }
    130 
    131     private static ISymbolicExpressionTreeNode MakeConstant(double c) {
    132       var node = (ConstantTreeNode)(new Constant()).CreateTreeNode();
    133       node.Value = c;
    134       return node;
    135     }
    136     #endregion
    13764  }
    13865}
Note: See TracChangeset for help on using the changeset viewer.