Changeset 12720
- Timestamp:
- 07/10/15 15:41:09 (9 years ago)
- Location:
- trunk/sources
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/InteractiveSymbolicClassificationSolutionSimplifierViewBase.cs
r12012 r12720 74 74 var impactAndReplacementValues = new Dictionary<ISymbolicExpressionTreeNode, Tuple<double, double>>(); 75 75 foreach (var node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix()) { 76 double impactValue, replacementValue ;77 calculator.CalculateImpactAndReplacementValues(Content.Model, node, Content.ProblemData, Content.ProblemData.TrainingIndices, out impactValue, out replacementValue );76 double impactValue, replacementValue, newQualityForImpactsCalculation; 77 calculator.CalculateImpactAndReplacementValues(Content.Model, node, Content.ProblemData, Content.ProblemData.TrainingIndices, out impactValue, out replacementValue, out newQualityForImpactsCalculation); 78 78 impactAndReplacementValues.Add(node, new Tuple<double, double>(impactValue, replacementValue)); 79 79 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationPruningAnalyzer.cs
r12358 r12720 45 45 46 46 public SymbolicClassificationPruningAnalyzer() { 47 Parameters.Add(new ValueParameter<Symbolic DataAnalysisExpressionPruningOperator>(PruningOperatorParameterName, "The operator used to prune trees", new SymbolicClassificationPruningOperator(new SymbolicClassificationSolutionImpactValuesCalculator())));47 Parameters.Add(new ValueParameter<SymbolicClassificationPruningOperator>(PruningOperatorParameterName, "The operator used to prune trees", new SymbolicClassificationPruningOperator(new SymbolicClassificationSolutionImpactValuesCalculator()))); 48 48 } 49 49 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationPruningOperator.cs
r12461 r12720 35 35 public class SymbolicClassificationPruningOperator : SymbolicDataAnalysisExpressionPruningOperator { 36 36 private const string ModelCreatorParameterName = "ModelCreator"; 37 private const string EvaluatorParameterName = "Evaluator"; 37 38 38 39 #region parameter properties 39 40 public ILookupParameter<ISymbolicClassificationModelCreator> ModelCreatorParameter { 40 41 get { return (ILookupParameter<ISymbolicClassificationModelCreator>)Parameters[ModelCreatorParameterName]; } 42 } 43 44 public ILookupParameter<ISymbolicClassificationSingleObjectiveEvaluator> EvaluatorParameter { 45 get { 46 return (ILookupParameter<ISymbolicClassificationSingleObjectiveEvaluator>)Parameters[EvaluatorParameterName]; 47 } 41 48 } 42 49 #endregion … … 51 58 : base(impactValuesCalculator) { 52 59 Parameters.Add(new LookupParameter<ISymbolicClassificationModelCreator>(ModelCreatorParameterName)); 60 Parameters.Add(new LookupParameter<ISymbolicClassificationSingleObjectiveEvaluator>(EvaluatorParameterName)); 53 61 } 54 62 … … 62 70 63 71 protected override double Evaluate(IDataAnalysisModel model) { 64 var classificationModel = (IClassificationModel)model; 72 var evaluator = EvaluatorParameter.ActualValue; 73 var classificationModel = (ISymbolicClassificationModel)model; 65 74 var classificationProblemData = (IClassificationProblemData)ProblemDataParameter.ActualValue; 66 75 var rows = Enumerable.Range(FitnessCalculationPartitionParameter.ActualValue.Start, FitnessCalculationPartitionParameter.ActualValue.Size); 67 68 return Evaluate(classificationModel, classificationProblemData, rows); 69 } 70 71 private static double Evaluate(IClassificationModel model, IClassificationProblemData problemData, IEnumerable<int> rows) { 72 var estimatedValues = model.GetEstimatedClassValues(problemData.Dataset, rows); 73 var targetValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 74 OnlineCalculatorError errorState; 75 var quality = OnlineAccuracyCalculator.Calculate(targetValues, estimatedValues, out errorState); 76 if (errorState != OnlineCalculatorError.None) return double.NaN; 77 return quality; 76 return evaluator.Evaluate(this.ExecutionContext, classificationModel.SymbolicExpressionTree, classificationProblemData, rows); 78 77 } 79 78 … … 86 85 87 86 var nodes = clonedTree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix().ToList(); 88 double quality = Evaluate(model, problemData, rows);87 double qualityForImpactsCalculation = double.NaN; 89 88 90 89 for (int i = 0; i < nodes.Count; ++i) { … … 92 91 if (node is ConstantTreeNode) continue; 93 92 94 double impactValue, replacementValue ;95 impactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, quality);93 double impactValue, replacementValue, newQualityForImpactsCalculation; 94 impactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, out newQualityForImpactsCalculation, qualityForImpactsCalculation); 96 95 97 96 if (pruneOnlyZeroImpactNodes && !impactValue.IsAlmost(0.0)) continue; … … 104 103 i += node.GetLength() - 1; // skip subtrees under the node that was folded 105 104 106 quality -= impactValue;105 qualityForImpactsCalculation = newQualityForImpactsCalculation; 107 106 } 108 107 return model.SymbolicExpressionTree; -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationSolutionImpactValuesCalculator.cs
r12012 r12720 47 47 } 48 48 49 public override double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double originalQuality= double.NaN) {49 public override double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double qualityForImpactsCalculation = double.NaN) { 50 50 double impactValue, replacementValue; 51 CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, originalQuality); 51 double newQualityForImpactsCalculation; 52 CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, out newQualityForImpactsCalculation, qualityForImpactsCalculation); 52 53 return impactValue; 53 54 } 54 55 55 56 public override void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, 56 IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, 57 double originalQuality= Double.NaN) {57 IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, out double newQualityForImpactsCalculation, 58 double qualityForImpactsCalculation = Double.NaN) { 58 59 var classificationModel = (ISymbolicClassificationModel)model; 59 60 var classificationProblemData = (IClassificationProblemData)problemData; 60 61 61 var dataset = classificationProblemData.Dataset; 62 var targetClassValues = dataset.GetDoubleValues(classificationProblemData.TargetVariable, rows); 63 64 OnlineCalculatorError errorState; 65 if (double.IsNaN(originalQuality)) { 66 var originalClassValues = classificationModel.GetEstimatedClassValues(dataset, rows); 67 originalQuality = OnlineAccuracyCalculator.Calculate(targetClassValues, originalClassValues, out errorState); 68 if (errorState != OnlineCalculatorError.None) originalQuality = 0.0; 69 } 62 if (double.IsNaN(qualityForImpactsCalculation)) 63 qualityForImpactsCalculation = CalculateQualityForImpacts(classificationModel, classificationProblemData, rows); 70 64 71 65 replacementValue = CalculateReplacementValue(classificationModel, node, classificationProblemData, rows); … … 81 75 tempModelParentNode.InsertSubtree(i, constantNode); 82 76 77 OnlineCalculatorError errorState; 78 var dataset = classificationProblemData.Dataset; 79 var targetClassValues = dataset.GetDoubleValues(classificationProblemData.TargetVariable, rows); 83 80 var estimatedClassValues = tempModel.GetEstimatedClassValues(dataset, rows); 84 double newQuality= OnlineAccuracyCalculator.Calculate(targetClassValues, estimatedClassValues, out errorState);85 if (errorState != OnlineCalculatorError.None) newQuality = 0.0;81 newQualityForImpactsCalculation = OnlineAccuracyCalculator.Calculate(targetClassValues, estimatedClassValues, out errorState); 82 if (errorState != OnlineCalculatorError.None) newQualityForImpactsCalculation = 0.0; 86 83 87 impactValue = originalQuality - newQuality; 84 impactValue = qualityForImpactsCalculation - newQualityForImpactsCalculation; 85 } 86 87 public static double CalculateQualityForImpacts(ISymbolicClassificationModel model, IClassificationProblemData problemData, IEnumerable<int> rows) { 88 OnlineCalculatorError errorState; 89 var dataset = problemData.Dataset; 90 var targetClassValues = dataset.GetDoubleValues(problemData.TargetVariable, rows); 91 var originalClassValues = model.GetEstimatedClassValues(dataset, rows); 92 var qualityForImpactsCalculation = OnlineAccuracyCalculator.Calculate(targetClassValues, originalClassValues, out errorState); 93 if (errorState != OnlineCalculatorError.None) qualityForImpactsCalculation = 0.0; 94 95 return qualityForImpactsCalculation; 88 96 } 89 97 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/InteractiveSymbolicRegressionSolutionSimplifierView.cs
r12012 r12720 63 63 var impactAndReplacementValues = new Dictionary<ISymbolicExpressionTreeNode, Tuple<double, double>>(); 64 64 foreach (var node in tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix()) { 65 double impactValue, replacementValue ;66 calculator.CalculateImpactAndReplacementValues(Content.Model, node, Content.ProblemData, Content.ProblemData.TrainingIndices, out impactValue, out replacementValue );65 double impactValue, replacementValue, newQualityForImpactsCalculation; 66 calculator.CalculateImpactAndReplacementValues(Content.Model, node, Content.ProblemData, Content.ProblemData.TrainingIndices, out impactValue, out replacementValue, out newQualityForImpactsCalculation); 67 67 impactAndReplacementValues.Add(node, new Tuple<double, double>(impactValue, replacementValue)); 68 68 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionPruningOperator.cs
r12641 r12720 27 27 using HeuristicLab.Core; 28 28 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 29 using HeuristicLab.Parameters; 29 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 30 31 … … 33 34 [Item("SymbolicRegressionPruningOperator", "An operator which prunes symbolic regression trees.")] 34 35 public class SymbolicRegressionPruningOperator : SymbolicDataAnalysisExpressionPruningOperator { 36 private const string EvaluatorParameterName = "Evaluator"; 37 38 #region parameter properties 39 public ILookupParameter<ISymbolicRegressionSingleObjectiveEvaluator> EvaluatorParameter { 40 get { return (ILookupParameter<ISymbolicRegressionSingleObjectiveEvaluator>)Parameters[EvaluatorParameterName]; } 41 } 42 #endregion 43 35 44 protected SymbolicRegressionPruningOperator(SymbolicRegressionPruningOperator original, Cloner cloner) 36 45 : base(original, cloner) { … … 45 54 public SymbolicRegressionPruningOperator(ISymbolicDataAnalysisSolutionImpactValuesCalculator impactValuesCalculator) 46 55 : base(impactValuesCalculator) { 56 Parameters.Add(new LookupParameter<ISymbolicRegressionSingleObjectiveEvaluator>(EvaluatorParameterName)); 47 57 } 48 58 … … 52 62 53 63 protected override double Evaluate(IDataAnalysisModel model) { 54 var regressionModel = (I RegressionModel)model;64 var regressionModel = (ISymbolicRegressionModel)model; 55 65 var regressionProblemData = (IRegressionProblemData)ProblemDataParameter.ActualValue; 56 var rows = Enumerable.Range(FitnessCalculationPartitionParameter.ActualValue.Start, FitnessCalculationPartitionParameter.ActualValue.Size); 57 return Evaluate(regressionModel, regressionProblemData, rows); 58 } 59 60 private static double Evaluate(IRegressionModel model, IRegressionProblemData problemData, 61 IEnumerable<int> rows) { 62 var estimatedValues = model.GetEstimatedValues(problemData.Dataset, rows); // also bounds the values 63 var targetValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 64 OnlineCalculatorError errorState; 65 var quality = OnlinePearsonsRCalculator.Calculate(targetValues, estimatedValues, out errorState); 66 if (errorState != OnlineCalculatorError.None) return double.NaN; 67 return quality*quality; 66 var evaluator = EvaluatorParameter.ActualValue; 67 var fitnessEvaluationPartition = FitnessCalculationPartitionParameter.ActualValue; 68 var rows = Enumerable.Range(fitnessEvaluationPartition.Start, fitnessEvaluationPartition.Size); 69 return evaluator.Evaluate(this.ExecutionContext, regressionModel.SymbolicExpressionTree, regressionProblemData, rows); 68 70 } 69 71 … … 72 74 var model = new SymbolicRegressionModel(clonedTree, interpreter, estimationLimits.Lower, estimationLimits.Upper); 73 75 var nodes = clonedTree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix().ToList(); // skip the nodes corresponding to the ProgramRootSymbol and the StartSymbol 74 double quality = Evaluate(model, problemData, rows); 76 77 double qualityForImpactsCalculation = double.NaN; // pass a NaN value initially so the impact calculator will calculate the quality 75 78 76 79 for (int i = 0; i < nodes.Count; ++i) { … … 79 82 80 83 double impactValue, replacementValue; 81 impactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, quality); 84 double newQualityForImpactsCalculation; 85 impactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, out newQualityForImpactsCalculation, qualityForImpactsCalculation); 82 86 83 87 if (pruneOnlyZeroImpactNodes && !impactValue.IsAlmost(0.0)) continue; … … 90 94 i += node.GetLength() - 1; // skip subtrees under the node that was folded 91 95 92 quality -= impactValue;96 qualityForImpactsCalculation = newQualityForImpactsCalculation; 93 97 } 94 98 return model.SymbolicExpressionTree; -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolutionImpactValuesCalculator.cs
r12641 r12720 48 48 } 49 49 50 public override double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double originalQuality= double.NaN) {51 double impactValue, replacementValue ;52 CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, o riginalQuality);50 public override double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double qualityForImpactsCalculation = double.NaN) { 51 double impactValue, replacementValue, newQualityForImpactsCalculation; 52 CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, out newQualityForImpactsCalculation, qualityForImpactsCalculation); 53 53 return impactValue; 54 54 } 55 55 56 56 public override void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, 57 IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, 58 double originalQuality= Double.NaN) {57 IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, out double newQualityForImpactsCalculation, 58 double qualityForImpactsCalculation = Double.NaN) { 59 59 var regressionModel = (ISymbolicRegressionModel)model; 60 60 var regressionProblemData = (IRegressionProblemData)problemData; … … 64 64 65 65 OnlineCalculatorError errorState; 66 if (double.IsNaN(originalQuality)) { 67 var originalValues = regressionModel.GetEstimatedValues(dataset, rows); 68 originalQuality = OnlinePearsonsRCalculator.Calculate(targetValues, originalValues, out errorState); 69 if (errorState != OnlineCalculatorError.None) originalQuality = 0.0; 70 } 66 if (double.IsNaN(qualityForImpactsCalculation)) 67 qualityForImpactsCalculation = CalculateQualityForImpacts(regressionModel, regressionProblemData, rows); 71 68 72 69 replacementValue = CalculateReplacementValue(regressionModel, node, regressionProblemData, rows); … … 83 80 84 81 var estimatedValues = tempModel.GetEstimatedValues(dataset, rows); 85 double newQuality = OnlinePearsonsRCalculator.Calculate(targetValues, estimatedValues, out errorState); 86 if (errorState != OnlineCalculatorError.None) newQuality = 0.0; 82 double r = OnlinePearsonsRCalculator.Calculate(targetValues, estimatedValues, out errorState); 83 if (errorState != OnlineCalculatorError.None) r = 0.0; 84 newQualityForImpactsCalculation = r * r; 87 85 88 impactValue = (originalQuality*originalQuality) - (newQuality*newQuality); 86 impactValue = qualityForImpactsCalculation - newQualityForImpactsCalculation; 87 } 88 89 public static double CalculateQualityForImpacts(ISymbolicRegressionModel model, IRegressionProblemData problemData, IEnumerable<int> rows) { 90 var estimatedValues = model.GetEstimatedValues(problemData.Dataset, rows); // also bounds the values 91 var targetValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 92 OnlineCalculatorError errorState; 93 var r = OnlinePearsonsRCalculator.Calculate(targetValues, estimatedValues, out errorState); 94 var quality = r * r; 95 if (errorState != OnlineCalculatorError.None) return double.NaN; 96 return quality; 89 97 } 90 98 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interfaces/ISymbolicDataAnalysisImpactValuesCalculator.cs
r10469 r12720 6 6 public interface ISymbolicDataAnalysisSolutionImpactValuesCalculator : IItem { 7 7 double CalculateReplacementValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows); 8 double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double originalQuality= double.NaN);8 double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double qualityForImpactsCalculation = double.NaN); 9 9 void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, 10 IEnumerable<int> rows, out double impactValue, out double replacementValue, double originalQuality= double.NaN);10 IEnumerable<int> rows, out double impactValue, out double replacementValue, out double newQualityForImpactsCalculation, double qualityForImpactsCalculation = double.NaN); 11 11 } 12 12 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs
r12361 r12720 49 49 private const string EstimationLimitsParameterName = "EstimationLimits"; 50 50 private const string InterpreterParameterName = "SymbolicExpressionTreeInterpreter"; 51 private const string ApplyLinearScalingParameterName = "ApplyLinearScaling"; 51 52 #endregion 52 53 … … 88 89 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[InterpreterParameterName]; } 89 90 } 91 public ILookupParameter<BoolValue> ApplyLinearScalingParameter { 92 get { return (ILookupParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; } 93 } 90 94 #endregion 91 95 … … 124 128 Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName)); 125 129 Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName)); 130 Parameters.Add(new LookupParameter<BoolValue>(ApplyLinearScalingParameterName)); 126 131 Parameters.Add(new ValueParameter<ISymbolicDataAnalysisSolutionImpactValuesCalculator>(ImpactValuesCalculatorParameterName, impactValuesCalculator)); 127 132 #endregion … … 141 146 var model = CreateModel(tree, interpreter, problemData, estimationLimits); 142 147 var nodes = tree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix().ToList(); 143 var rows = Enumerable.Range(fitnessCalculationPartition.Start, fitnessCalculationPartition.Size) ;148 var rows = Enumerable.Range(fitnessCalculationPartition.Start, fitnessCalculationPartition.Size).ToList(); 144 149 var prunedSubtrees = 0; 145 150 var prunedTrees = 0; 146 151 var prunedNodes = 0; 147 152 148 double quality = Evaluate(model);153 double qualityForImpactsCalculation = double.NaN; 149 154 150 155 for (int i = 0; i < nodes.Count; ++i) { … … 153 158 154 159 double impactValue, replacementValue; 155 ImpactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, quality); 160 double newQualityForImpacts; 161 ImpactValuesCalculator.CalculateImpactAndReplacementValues(model, node, problemData, rows, out impactValue, out replacementValue, out newQualityForImpacts, qualityForImpactsCalculation); 156 162 157 163 if (PruneOnlyZeroImpactNodes && !impactValue.IsAlmost(0.0)) continue; … … 165 171 i += length - 1; // skip subtrees under the node that was folded 166 172 167 quality -= impactValue;168 173 prunedSubtrees++; 169 174 prunedNodes += length; 175 176 qualityForImpactsCalculation = newQualityForImpacts; 170 177 } 171 178 … … 174 181 PrunedTreesParameter.ActualValue = new IntValue(prunedTrees); 175 182 PrunedNodesParameter.ActualValue = new IntValue(prunedNodes); 176 QualityParameter.ActualValue.Value = quality; 183 184 if (prunedSubtrees > 0) // if nothing was pruned then there's no need to re-evaluate the tree 185 QualityParameter.ActualValue.Value = Evaluate(model); 177 186 178 187 return base.Apply(); -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisSolutionImpactValuesCalculator.cs
r12509 r12720 37 37 protected SymbolicDataAnalysisSolutionImpactValuesCalculator(bool deserializing) : base(deserializing) { } 38 38 public abstract double CalculateReplacementValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows); 39 public abstract double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double originalQuality= double.NaN);40 public abstract void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, double originalQuality= double.NaN);39 public abstract double CalculateImpactValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, double qualityForImpactsCalculation = double.NaN); 40 public abstract void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, out double newQualityForImpactsCalculation, double qualityForImpactsCalculation = double.NaN); 41 41 42 42 protected static double CalculateReplacementValue(ISymbolicExpressionTreeNode node, ISymbolicExpressionTree sourceTree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter,
Note: See TracChangeset
for help on using the changeset viewer.