Changeset 8664 for trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective
- Timestamp:
- 09/17/12 11:18:40 (12 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveMeanSquaredErrorTreeSizeEvaluator.cs
r7259 r8664 65 65 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context; 66 66 EstimationLimitsParameter.ExecutionContext = context; 67 ApplyLinearScalingParameter.ExecutionContext = context; 67 68 68 69 double[] quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows); … … 70 71 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null; 71 72 EstimationLimitsParameter.ExecutionContext = null; 73 ApplyLinearScalingParameter.ExecutionContext = null; 72 74 73 75 return quality; -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectivePearsonRSquaredTreeSizeEvaluator.cs
r6740 r8664 26 26 IEnumerable<int> rows = GenerateRowsToEvaluate(); 27 27 var solution = SymbolicExpressionTreeParameter.ActualValue; 28 double[] qualities = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows );28 double[] qualities = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows, ApplyLinearScalingParameter.ActualValue.Value); 29 29 QualitiesParameter.ActualValue = new DoubleArray(qualities); 30 30 return base.Apply(); 31 31 } 32 32 33 public static double[] Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, IClassificationProblemData problemData, IEnumerable<int> rows ) {33 public static double[] Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, IClassificationProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling) { 34 34 IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows); 35 IEnumerable<double> originalValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows);35 IEnumerable<double> targetValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 36 36 OnlineCalculatorError errorState; 37 double r2 = OnlinePearsonsRSquaredCalculator.Calculate(estimatedValues, originalValues, out errorState); 38 if (errorState != OnlineCalculatorError.None) r2 = 0.0; 39 return new double[] { r2, solution.Length }; 37 38 double r2; 39 if (applyLinearScaling) { 40 var r2Calculator = new OnlinePearsonsRSquaredCalculator(); 41 CalculateWithScaling(targetValues, estimatedValues, lowerEstimationLimit, upperEstimationLimit, r2Calculator, problemData.Dataset.Rows); 42 errorState = r2Calculator.ErrorState; 43 r2 = r2Calculator.RSquared; 44 } else { 45 IEnumerable<double> boundedEstimatedValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit); 46 r2 = OnlinePearsonsRSquaredCalculator.Calculate(targetValues, boundedEstimatedValues, out errorState); 47 } 48 49 if (errorState != OnlineCalculatorError.None) r2 = double.NaN; 50 return new double[2] { r2, solution.Length }; 40 51 41 52 } … … 45 56 EstimationLimitsParameter.ExecutionContext = context; 46 57 47 double[] quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows );58 double[] quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows, ApplyLinearScalingParameter.ActualValue.Value); 48 59 49 60 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null; -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveProblem.cs
r8594 r8664 68 68 Parameters.Add(new ValueParameter<ISymbolicClassificationModelCreator>(ModelCreatorParameterName, "", new AccuracyMaximizingThresholdsModelCreator())); 69 69 70 ApplyLinearScalingParameter.Value.Value = false; 70 71 EstimationLimitsParameter.Hidden = true; 71 72 -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveTrainingBestSolutionAnalyzer.cs
r8594 r8664 22 22 using HeuristicLab.Common; 23 23 using HeuristicLab.Core; 24 using HeuristicLab.Data;25 24 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 26 25 using HeuristicLab.Parameters; … … 39 38 private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicDataAnalysisTreeInterpreter"; 40 39 private const string EstimationLimitsParameterName = "EstimationLimits"; 41 private const string ApplyLinearScalingParameterName = "ApplyLinearScaling";42 40 43 41 #region parameter properties … … 57 55 get { return (IValueLookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; } 58 56 } 59 public IValueParameter<BoolValue> ApplyLinearScalingParameter {60 get { return (IValueParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; }61 }62 #endregion63 64 #region properties65 public BoolValue ApplyLinearScaling {66 get { return ApplyLinearScalingParameter.Value; }67 }68 57 #endregion 69 58 … … 77 66 Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The symbolic data analysis tree interpreter for the symbolic expression tree.")); 78 67 Parameters.Add(new ValueLookupParameter<DoubleLimit>(EstimationLimitsParameterName, "The lower and upper limit for the estimated values produced by the symbolic classification model.")); 79 Parameters.Add(new ValueParameter<BoolValue>(ApplyLinearScalingParameterName, "Flag that indicates if the produced symbolic classification solution should be linearly scaled.", new BoolValue(false)));80 68 } 81 69 public override IDeepCloneable Clone(Cloner cloner) { … … 91 79 protected override ISymbolicClassificationSolution CreateSolution(ISymbolicExpressionTree bestTree, double[] bestQuality) { 92 80 var model = ModelCreatorParameter.ActualValue.CreateSymbolicClassificationModel((ISymbolicExpressionTree)bestTree.Clone(), SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper); 93 if (ApplyLinearScaling .Value) SymbolicClassificationModel.Scale(model, ProblemDataParameter.ActualValue);81 if (ApplyLinearScalingParameter.ActualValue.Value) SymbolicClassificationModel.Scale(model, ProblemDataParameter.ActualValue, ProblemDataParameter.ActualValue.TargetVariable); 94 82 95 83 model.RecalculateModelParameters(ProblemDataParameter.ActualValue, ProblemDataParameter.ActualValue.TrainingIndices); -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/MultiObjective/SymbolicClassificationMultiObjectiveValidationBestSolutionAnalyzer.cs
r8594 r8664 22 22 using HeuristicLab.Common; 23 23 using HeuristicLab.Core; 24 using HeuristicLab.Data;25 24 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 26 25 using HeuristicLab.Parameters; … … 37 36 private const string ModelCreatorParameterName = "ModelCreator"; 38 37 private const string EstimationLimitsParameterName = "EstimationLimits"; 39 private const string ApplyLinearScalingParameterName = "ApplyLinearScaling";40 38 41 39 #region parameter properties 42 40 public IValueLookupParameter<DoubleLimit> EstimationLimitsParameter { 43 41 get { return (IValueLookupParameter<DoubleLimit>)Parameters[EstimationLimitsParameterName]; } 44 }45 public IValueParameter<BoolValue> ApplyLinearScalingParameter {46 get { return (IValueParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; }47 42 } 48 43 public IValueLookupParameter<ISymbolicClassificationModelCreator> ModelCreatorParameter { … … 54 49 #endregion 55 50 56 #region properties57 public BoolValue ApplyLinearScaling {58 get { return ApplyLinearScalingParameter.Value; }59 }60 #endregion61 51 [StorableConstructor] 62 52 private SymbolicClassificationMultiObjectiveValidationBestSolutionAnalyzer(bool deserializing) : base(deserializing) { } … … 65 55 : base() { 66 56 Parameters.Add(new ValueLookupParameter<DoubleLimit>(EstimationLimitsParameterName, "The loewr and upper limit for the estimated values produced by the symbolic classification model.")); 67 Parameters.Add(new ValueParameter<BoolValue>(ApplyLinearScalingParameterName, "Flag that indicates if the produced symbolic classification solution should be linearly scaled.", new BoolValue(false)));68 57 Parameters.Add(new ValueLookupParameter<ISymbolicClassificationModelCreator>(ModelCreatorParameterName, "")); 69 58 } … … 72 61 } 73 62 74 [StorableHook(HookType.AfterDeserialization)]75 private void AfterDeserialization() {76 if (!Parameters.ContainsKey(ModelCreatorParameterName))77 Parameters.Add(new ValueLookupParameter<ISymbolicClassificationModelCreator>(ModelCreatorParameterName, ""));78 }79 63 80 64 protected override ISymbolicClassificationSolution CreateSolution(ISymbolicExpressionTree bestTree, double[] bestQualities) { 81 65 var model = ModelCreatorParameter.ActualValue.CreateSymbolicClassificationModel((ISymbolicExpressionTree)bestTree.Clone(), SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper); 82 if (ApplyLinearScaling .Value) SymbolicClassificationModel.Scale(model, ProblemDataParameter.ActualValue);66 if (ApplyLinearScalingParameter.ActualValue.Value) SymbolicClassificationModel.Scale(model, ProblemDataParameter.ActualValue, ProblemDataParameter.ActualValue.TargetVariable); 83 67 84 68 model.RecalculateModelParameters(ProblemDataParameter.ActualValue, ProblemDataParameter.ActualValue.TrainingIndices);
Note: See TracChangeset
for help on using the changeset viewer.