Changeset 15131 for stable/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolutionImpactValuesCalculator.cs
- Timestamp:
- 07/06/17 10:19:37 (7 years ago)
- Location:
- stable
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression
-
stable/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4
-
stable/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionSolutionImpactValuesCalculator.cs
r14186 r15131 41 41 [StorableConstructor] 42 42 protected SymbolicRegressionSolutionImpactValuesCalculator(bool deserializing) : base(deserializing) { } 43 public override double CalculateReplacementValue(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, IDataAnalysisProblemData problemData, IEnumerable<int> rows) {44 var regressionModel = (ISymbolicRegressionModel)model;45 var regressionProblemData = (IRegressionProblemData)problemData;46 47 return CalculateReplacementValue(node, regressionModel.SymbolicExpressionTree, regressionModel.Interpreter, regressionProblemData.Dataset, rows);48 }49 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 return impactValue;54 }55 43 56 44 public override void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node, 57 45 IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, out double newQualityForImpactsCalculation, 58 double qualityForImpactsCalculation = Double.NaN) {46 double qualityForImpactsCalculation = double.NaN) { 59 47 var regressionModel = (ISymbolicRegressionModel)model; 60 48 var regressionProblemData = (IRegressionProblemData)problemData; … … 63 51 var targetValues = dataset.GetDoubleValues(regressionProblemData.TargetVariable, rows); 64 52 65 OnlineCalculatorError errorState;66 53 if (double.IsNaN(qualityForImpactsCalculation)) 67 54 qualityForImpactsCalculation = CalculateQualityForImpacts(regressionModel, regressionProblemData, rows); 68 69 replacementValue = CalculateReplacementValue(regressionModel, node, regressionProblemData, rows);70 var constantNode = new ConstantTreeNode(new Constant()) { Value = replacementValue };71 55 72 56 var cloner = new Cloner(); … … 76 60 var tempModelParentNode = tempModelNode.Parent; 77 61 int i = tempModelParentNode.IndexOfSubtree(tempModelNode); 78 tempModelParentNode.RemoveSubtree(i);79 tempModelParentNode.InsertSubtree(i, constantNode);80 62 81 var estimatedValues = tempModel.GetEstimatedValues(dataset, rows); 82 double r = OnlinePearsonsRCalculator.Calculate(targetValues, estimatedValues, out errorState); 83 if (errorState != OnlineCalculatorError.None) r = 0.0; 84 newQualityForImpactsCalculation = r * r; 63 double bestReplacementValue = 0.0; 64 double bestImpactValue = double.PositiveInfinity; 65 newQualityForImpactsCalculation = qualityForImpactsCalculation; // initialize 66 // try the potentially reasonable replacement values and use the best one 67 foreach (var repValue in CalculateReplacementValues(node, regressionModel.SymbolicExpressionTree, regressionModel.Interpreter, regressionProblemData.Dataset, regressionProblemData.TrainingIndices)) { 85 68 86 impactValue = qualityForImpactsCalculation - newQualityForImpactsCalculation; 69 tempModelParentNode.RemoveSubtree(i); 70 71 var constantNode = new ConstantTreeNode(new Constant()) { Value = repValue }; 72 73 tempModelParentNode.InsertSubtree(i, constantNode); 74 75 var estimatedValues = tempModel.GetEstimatedValues(dataset, rows); 76 OnlineCalculatorError errorState; 77 double r = OnlinePearsonsRCalculator.Calculate(targetValues, estimatedValues, out errorState); 78 if (errorState != OnlineCalculatorError.None) r = 0.0; 79 newQualityForImpactsCalculation = r * r; 80 81 impactValue = qualityForImpactsCalculation - newQualityForImpactsCalculation; 82 if (impactValue < bestImpactValue) { 83 bestImpactValue = impactValue; 84 bestReplacementValue = repValue; 85 } 86 } 87 replacementValue = bestReplacementValue; 88 impactValue = bestImpactValue; 87 89 } 88 90
Note: See TracChangeset
for help on using the changeset viewer.