Changeset 12049 for branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective
- Timestamp:
- 02/21/15 15:55:47 (9 years ago)
- Location:
- branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationPhenotypicDiversityAnalyzer.cs
r12030 r12049 20 20 #endregion 21 21 22 using System.Collections.Generic;23 22 using System.Linq; 24 23 using HeuristicLab.Analysis; … … 30 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 30 32 namespace HeuristicLab.Problems.DataAnalysis.Symbolic. Analyzers{31 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification { 33 32 [Item("SymbolicClassificationPhenotypicDiversityAnalyzer", "An analyzer which calculates diversity based on the phenotypic distance between trees")] 34 33 [StorableClass] … … 39 38 private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter"; 40 39 private const string ProblemDataParameterName = "ProblemData"; 40 private const string ModelCreatorParameterName = "ModelCreator"; 41 41 private const string EstimationLimitsParameterName = "EstimationLimits"; 42 42 private const string UseClassValuesParameterName = "UseClassValues"; … … 53 53 get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; } 54 54 } 55 public ILookupParameter<ISymbolicDiscriminantFunctionClassificationModelCreator> ModelCreatorParameter { 56 get { return (ILookupParameter<ISymbolicDiscriminantFunctionClassificationModelCreator>)Parameters[ModelCreatorParameterName]; } 57 } 55 58 public IValueLookupParameter<IClassificationProblemData> ProblemDataParameter { 56 59 get { return (IValueLookupParameter<IClassificationProblemData>)Parameters[ProblemDataParameterName]; } … … 65 68 66 69 #region properties 67 bool UseClassValues {70 private bool UseClassValues { 68 71 get { return UseClassValuesParameter.Value.Value; } 69 72 set { UseClassValuesParameter.Value.Value = value; } … … 78 81 Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic data analysis tree.")); 79 82 Parameters.Add(new ValueLookupParameter<IClassificationProblemData>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated.")); 83 Parameters.Add(new LookupParameter<ISymbolicDiscriminantFunctionClassificationModelCreator>(ModelCreatorParameterName, "The model creator for creating discriminant function classification models.")); 80 84 Parameters.Add(new ValueLookupParameter<DoubleLimit>(EstimationLimitsParameterName, "The upper and lower limit that should be used as cut off value for the output values of symbolic data analysis trees.")); 81 Parameters.Add(new FixedValueParameter<BoolValue>(UseClassValuesParameterName, 82 "Specifies whether the raw estimated values of the tree or the corresponding class values should be used for similarity calculation.", new BoolValue(false))); 85 Parameters.Add(new FixedValueParameter<BoolValue>(UseClassValuesParameterName, "Specifies whether the raw estimated values of the tree or the corresponding class values should be used for similarity calculation.", new BoolValue(false))); 83 86 #endregion 84 87 } … … 100 103 var trees = SymbolicExpressionTreeParameter.ActualValue; 101 104 var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue; 105 var problemData = ProblemDataParameter.ActualValue; 102 106 var ds = ProblemDataParameter.ActualValue.Dataset; 103 107 var rows = ProblemDataParameter.ActualValue.TrainingIndices; 104 105 if (UseClassValues) { 106 var problemData = ProblemDataParameter.ActualValue; 107 var evaluatedValues = new ItemArray<DoubleArray>(trees.Length); 108 for (int i = 0; i < trees.Length; ++i) { 109 var t = trees[i]; 110 double[] classValues, thresholds; 111 var estimatedValues = interpreter.GetSymbolicExpressionTreeValues(t, ds, rows).ToArray(); 112 AccuracyMaximizationThresholdCalculator.CalculateThresholds(problemData, estimatedValues, 113 problemData.Dataset.GetDoubleValues(problemData.TargetVariable, problemData.TrainingIndices), 114 out classValues, out thresholds); 115 var estimatedClassValues = new List<double>(); 116 foreach (var x in estimatedValues) { 117 int classIndex = 0; 118 // find first threshold value which is larger than x => class index = threshold index + 1 119 for (int j = 0; j < thresholds.Length; j++) { 120 if (x > thresholds[j]) classIndex++; 121 else break; 122 } 123 estimatedClassValues.Add(classValues.ElementAt(classIndex - 1)); 124 } 125 evaluatedValues[i] = new DoubleArray(estimatedClassValues.ToArray()); 126 } 127 EvaluatedValuesParameter.ActualValue = evaluatedValues; 128 } else { 129 var evaluatedValues = new ItemArray<DoubleArray>(trees.Select(t => new DoubleArray(interpreter.GetSymbolicExpressionTreeValues(t, ds, rows).ToArray()))); 130 EvaluatedValuesParameter.ActualValue = evaluatedValues; 108 var modelCreator = ModelCreatorParameter.ActualValue; 109 var estimationLimits = EstimationLimitsParameter.ActualValue; 110 var evaluatedValues = new ItemArray<DoubleArray>(trees.Length); 111 for (int i = 0; i < trees.Length; ++i) { 112 var model = (IDiscriminantFunctionClassificationModel)modelCreator.CreateSymbolicDiscriminantFunctionClassificationModel(trees[i], interpreter, estimationLimits.Lower, estimationLimits.Upper); 113 model.RecalculateModelParameters(problemData, rows); 114 var values = UseClassValues ? model.GetEstimatedClassValues(ds, rows) : model.GetEstimatedValues(ds, rows); 115 evaluatedValues[i] = new DoubleArray(values.ToArray()); 131 116 } 117 EvaluatedValuesParameter.ActualValue = evaluatedValues; 132 118 return base.Apply(); 133 119 } -
branches/SymbolicExpressionTreeDiversityAnalyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/SingleObjective/SymbolicClassificationSingleObjectiveProblem.cs
r12030 r12049 24 24 using HeuristicLab.Parameters; 25 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 26 using HeuristicLab.Problems.DataAnalysis.Symbolic.Analyzers;27 26 28 27 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Classification { … … 147 146 op.ModelCreatorParameter.ActualName = ModelCreatorParameter.Name; 148 147 } 148 149 foreach (var op in Operators.OfType<SymbolicClassificationPhenotypicDiversityAnalyzer>()) { 150 var sim = op.SimilarityCalculator as SymbolicExpressionTreePhenotypicSimilarityCalculator; 151 if (sim == null) { 152 op.SimilarityCalculator = new SymbolicExpressionTreePhenotypicSimilarityCalculator { 153 SolutionVariableName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName 154 }; 155 } else { 156 sim.SolutionVariableName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName; 157 } 158 } 149 159 } 150 160 }
Note: See TracChangeset
for help on using the changeset viewer.