Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/19/17 10:49:02 (7 years ago)
Author:
pfleck
Message:

#1666: Merged into trunk

Location:
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification
Files:
2 edited

Legend:

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

  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SymbolicClassificationSolutionImpactValuesCalculator.cs

    r14826 r15371  
    2020#endregion
    2121
    22 using System;
    2322using System.Collections.Generic;
    2423using HeuristicLab.Common;
    2524using HeuristicLab.Core;
    26 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2725using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2826
     
    4038    protected SymbolicClassificationSolutionImpactValuesCalculator(bool deserializing) : base(deserializing) { }
    4139
    42     public override void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model,
    43       ISymbolicExpressionTreeNode node,
    44       IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue,
    45       out double newQualityForImpactsCalculation,
    46       double qualityForImpactsCalculation = Double.NaN) {
     40    protected override double CalculateQualityForImpacts(ISymbolicDataAnalysisModel model, IDataAnalysisProblemData problemData, IEnumerable<int> rows) {
    4741      var classificationModel = (ISymbolicClassificationModel)model;
    4842      var classificationProblemData = (IClassificationProblemData)problemData;
    49 
    50       if (double.IsNaN(qualityForImpactsCalculation))
    51         qualityForImpactsCalculation = CalculateQualityForImpacts(classificationModel, classificationProblemData, rows);
    52 
    53 
    54       var cloner = new Cloner();
    55       var tempModel = cloner.Clone(classificationModel);
    56       var tempModelNode = (ISymbolicExpressionTreeNode)cloner.GetClone(node);
    57 
    58       var tempModelParentNode = tempModelNode.Parent;
    59       int i = tempModelParentNode.IndexOfSubtree(tempModelNode);
    60       double bestReplacementValue = 0.0;
    61       double bestImpactValue = double.PositiveInfinity;
    62       newQualityForImpactsCalculation = qualityForImpactsCalculation; // initialize
    63       // try the potentially reasonable replacement values and use the best one
    64       foreach (var repValue in CalculateReplacementValues(node, classificationModel.SymbolicExpressionTree, classificationModel.Interpreter, classificationProblemData.Dataset, classificationProblemData.TrainingIndices)) {
    65         tempModelParentNode.RemoveSubtree(i);
    66 
    67         var constantNode = new ConstantTreeNode(new Constant()) { Value = repValue };
    68         tempModelParentNode.InsertSubtree(i, constantNode);
    69 
    70         var dataset = classificationProblemData.Dataset;
    71         var targetClassValues = dataset.GetDoubleValues(classificationProblemData.TargetVariable, rows);
    72         var estimatedClassValues = tempModel.GetEstimatedClassValues(dataset, rows);
    73         OnlineCalculatorError errorState;
    74         newQualityForImpactsCalculation = OnlineAccuracyCalculator.Calculate(targetClassValues, estimatedClassValues,
    75           out errorState);
    76         if (errorState != OnlineCalculatorError.None) newQualityForImpactsCalculation = 0.0;
    77 
    78         impactValue = qualityForImpactsCalculation - newQualityForImpactsCalculation;
    79 
    80         if (impactValue < bestImpactValue) {
    81           bestImpactValue = impactValue;
    82           bestReplacementValue = repValue;
    83         }
    84       }
    85       replacementValue = bestReplacementValue;
    86       impactValue = bestImpactValue;
    87     }
    88 
    89     public static double CalculateQualityForImpacts(ISymbolicClassificationModel model, IClassificationProblemData problemData, IEnumerable<int> rows) {
    9043      OnlineCalculatorError errorState;
    9144      var dataset = problemData.Dataset;
    92       var targetClassValues = dataset.GetDoubleValues(problemData.TargetVariable, rows);
    93       var originalClassValues = model.GetEstimatedClassValues(dataset, rows);
     45      var targetClassValues = dataset.GetDoubleValues(classificationProblemData.TargetVariable, rows);
     46      var originalClassValues = classificationModel.GetEstimatedClassValues(dataset, rows);
    9447      var qualityForImpactsCalculation = OnlineAccuracyCalculator.Calculate(targetClassValues, originalClassValues, out errorState);
    9548      if (errorState != OnlineCalculatorError.None) qualityForImpactsCalculation = 0.0;
    96 
    9749      return qualityForImpactsCalculation;
    9850    }
Note: See TracChangeset for help on using the changeset viewer.