Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/14/12 18:58:15 (12 years ago)
Author:
gkronber
Message:

#1847 merged r8205:8635 from trunk into branch

Location:
branches/GP-MoveOperators
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/GP-MoveOperators

  • branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification

    • Property svn:mergeinfo set to (toggle deleted branches)
      /branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Classificationmergedeligible
      /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classificationmergedeligible
      /branches/Algorithms.GradientDescent/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5516-5520
      /branches/Benchmarking/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification6917-7005
      /branches/CloningRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification4656-4721
      /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5471-5808
      /branches/DataAnalysis SolutionEnsembles/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5815-6180
      /branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification4458-4459,​4462,​4464
      /branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification6284-6795
      /branches/GP.Symbols (TimeLag, Diff, Integral)/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5060
      /branches/NET40/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5138-5162
      /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5175-5192
      /branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification7568-7810
      /branches/QAPAlgorithms/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification6350-6627
      /branches/Restructure trunk solution/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification6828
      /branches/ScatterSearch (trunk integration)/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification7787-8333
      /branches/SuccessProgressAnalysis/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5370-5682
      /branches/Trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification6829-6865
      /branches/VNS/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5594-5752
      /branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification5959-6341
  • branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4

    • Property svn:ignore
      •  

        old new  
         1*.user
         2Plugin.cs
        13bin
        2 *.user
        3 HeuristicLabProblemsDataAnalysisSymbolicClassificationPlugin.cs
        44obj
        5 *.vs10x
        6 Plugin.cs
  • branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationModel.cs

    r7259 r8660  
    3232  [StorableClass]
    3333  [Item(Name = "SymbolicClassificationModel", Description = "Represents a symbolic classification model.")]
    34   public class SymbolicClassificationModel : SymbolicDataAnalysisModel, ISymbolicClassificationModel {
     34  public abstract class
     35    SymbolicClassificationModel : SymbolicDataAnalysisModel, ISymbolicClassificationModel {
     36    [Storable]
     37    private double lowerEstimationLimit;
     38    public double LowerEstimationLimit { get { return lowerEstimationLimit; } }
     39    [Storable]
     40    private double upperEstimationLimit;
     41    public double UpperEstimationLimit { get { return upperEstimationLimit; } }
     42
    3543    [StorableConstructor]
    3644    protected SymbolicClassificationModel(bool deserializing) : base(deserializing) { }
    3745    protected SymbolicClassificationModel(SymbolicClassificationModel original, Cloner cloner)
    3846      : base(original, cloner) {
     47      lowerEstimationLimit = original.lowerEstimationLimit;
     48      upperEstimationLimit = original.upperEstimationLimit;
    3949    }
    40     public SymbolicClassificationModel(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter)
     50    protected SymbolicClassificationModel(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, double lowerEstimationLimit = double.MinValue, double upperEstimationLimit = double.MaxValue)
    4151      : base(tree, interpreter) {
     52      this.lowerEstimationLimit = lowerEstimationLimit;
     53      this.upperEstimationLimit = upperEstimationLimit;
    4254    }
    4355
    44     public override IDeepCloneable Clone(Cloner cloner) {
    45       return new SymbolicClassificationModel(this, cloner);
    46     }
     56    public abstract IEnumerable<double> GetEstimatedClassValues(Dataset dataset, IEnumerable<int> rows);
     57    public abstract void RecalculateModelParameters(IClassificationProblemData problemData, IEnumerable<int> rows);
    4758
    48     public IEnumerable<double> GetEstimatedClassValues(Dataset dataset, IEnumerable<int> rows) {
    49       return Interpreter.GetSymbolicExpressionTreeValues(SymbolicExpressionTree, dataset, rows);
    50     }
     59    public abstract ISymbolicClassificationSolution CreateClassificationSolution(IClassificationProblemData problemData);
    5160
    52     public ISymbolicClassificationSolution CreateClassificationSolution(IClassificationProblemData problemData) {
    53       return new SymbolicClassificationSolution(this, problemData);
    54     }
    5561    IClassificationSolution IClassificationModel.CreateClassificationSolution(IClassificationProblemData problemData) {
    5662      return CreateClassificationSolution(problemData);
    5763    }
    5864
     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;
    5977
     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
    60137  }
    61138}
Note: See TracChangeset for help on using the changeset viewer.