Changeset 8660 for branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationModel.cs
- Timestamp:
- 09/14/12 18:58:15 (12 years ago)
- Location:
- branches/GP-MoveOperators
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GP-MoveOperators
- Property svn:ignore
-
old new 21 21 protoc.exe 22 22 _ReSharper.HeuristicLab 3.3 Tests 23 Google.ProtocolBuffers-2.4.1.473.dll
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
/branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification merged eligible /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification merged eligible /branches/Algorithms.GradientDescent/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5516-5520 /branches/Benchmarking/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 6917-7005 /branches/CloningRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 4656-4721 /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5471-5808 /branches/DataAnalysis SolutionEnsembles/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5815-6180 /branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 4458-4459,4462,4464 /branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 6284-6795 /branches/GP.Symbols (TimeLag, Diff, Integral)/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5060 /branches/NET40/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5138-5162 /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5175-5192 /branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 7568-7810 /branches/QAPAlgorithms/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 6350-6627 /branches/Restructure trunk solution/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 6828 /branches/ScatterSearch (trunk integration)/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 7787-8333 /branches/SuccessProgressAnalysis/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5370-5682 /branches/Trunk/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 6829-6865 /branches/VNS/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5594-5752 /branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification 5959-6341
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
-
branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4
- Property svn:ignore
-
old new 1 *.user 2 Plugin.cs 1 3 bin 2 *.user3 HeuristicLabProblemsDataAnalysisSymbolicClassificationPlugin.cs4 4 obj 5 *.vs10x6 Plugin.cs
-
- Property svn:ignore
-
branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationModel.cs
r7259 r8660 32 32 [StorableClass] 33 33 [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 35 43 [StorableConstructor] 36 44 protected SymbolicClassificationModel(bool deserializing) : base(deserializing) { } 37 45 protected SymbolicClassificationModel(SymbolicClassificationModel original, Cloner cloner) 38 46 : base(original, cloner) { 47 lowerEstimationLimit = original.lowerEstimationLimit; 48 upperEstimationLimit = original.upperEstimationLimit; 39 49 } 40 p ublic SymbolicClassificationModel(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter)50 protected SymbolicClassificationModel(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, double lowerEstimationLimit = double.MinValue, double upperEstimationLimit = double.MaxValue) 41 51 : base(tree, interpreter) { 52 this.lowerEstimationLimit = lowerEstimationLimit; 53 this.upperEstimationLimit = upperEstimationLimit; 42 54 } 43 55 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); 47 58 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); 51 60 52 public ISymbolicClassificationSolution CreateClassificationSolution(IClassificationProblemData problemData) {53 return new SymbolicClassificationSolution(this, problemData);54 }55 61 IClassificationSolution IClassificationModel.CreateClassificationSolution(IClassificationProblemData problemData) { 56 62 return CreateClassificationSolution(problemData); 57 63 } 58 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; 59 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 60 137 } 61 138 }
Note: See TracChangeset
for help on using the changeset viewer.