Changeset 4297 for branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/OverfittingAnalyzer.cs
- Timestamp:
- 08/23/10 18:54:35 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/OverfittingAnalyzer.cs
r4275 r4297 61 61 get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; } 62 62 } 63 public ScopeTreeLookupParameter<DoubleValue> ValidationQualityParameter { 64 get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["ValidationQuality"]; } 65 } 63 66 public IValueLookupParameter<ISymbolicExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter { 64 67 get { return (IValueLookupParameter<ISymbolicExpressionTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; } … … 163 166 Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to analyze.")); 164 167 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality")); 168 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("ValidationQuality")); 165 169 Parameters.Add(new LookupParameter<BoolValue>(MaximizationParameterName, "The direction of optimization.")); 166 170 Parameters.Add(new ValueLookupParameter<ISymbolicExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, "The interpreter that should be used for the analysis of symbolic expression trees.")); … … 180 184 Parameters.Add(new LookupParameter<DoubleValue>("InitialTrainingQuality")); 181 185 Parameters.Add(new LookupParameter<DoubleMatrix>("TrainingAndValidationQualities")); 182 Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue( 0.1)));186 Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue(1))); 183 187 184 188 } … … 202 206 } 203 207 if (!Parameters.ContainsKey("Percentile")) { 204 Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue(0.1))); 208 Parameters.Add(new ValueLookupParameter<DoubleValue>("Percentile", new DoubleValue(1))); 209 } 210 if (!Parameters.ContainsKey("ValidationQuality")) { 211 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("ValidationQuality")); 205 212 } 206 213 } … … 209 216 var trees = SymbolicExpressionTree; 210 217 ItemArray<DoubleValue> qualities = QualityParameter.ActualValue; 218 ItemArray<DoubleValue> validationQualities = ValidationQualityParameter.ActualValue; 211 219 212 220 string targetVariable = ProblemData.TargetVariable.Value; … … 226 234 //SymbolicExpressionTree bestTree = null; 227 235 228 List<double> validationQualities = new List<double>();229 foreach (var tree in trees) {230 double quality = Evaluator.Evaluate(SymbolicExpressionTreeInterpreter, tree,231 lowerEstimationLimit, upperEstimationLimit,232 ProblemData.Dataset, targetVariable,233 rows);234 validationQualities.Add(quality);235 //if ((Maximization.Value && quality > bestQuality) ||236 // (!Maximization.Value && quality < bestQuality)) {237 // bestQuality = quality;238 // bestTree = tree;239 //}240 }236 //List<double> validationQualities = new List<double>(); 237 //foreach (var tree in trees) { 238 // double quality = Evaluator.Evaluate(SymbolicExpressionTreeInterpreter, tree, 239 // lowerEstimationLimit, upperEstimationLimit, 240 // ProblemData.Dataset, targetVariable, 241 // rows); 242 // validationQualities.Add(quality); 243 // //if ((Maximization.Value && quality > bestQuality) || 244 // // (!Maximization.Value && quality < bestQuality)) { 245 // // bestQuality = quality; 246 // // bestTree = tree; 247 // //} 248 //} 241 249 242 250 //if (RelativeValidationQualityParameter.ActualValue == null) { 243 251 // first call initialize the relative quality using the difference between average training and validation quality 244 252 double avgTrainingQuality = qualities.Select(x => x.Value).Median(); 245 double avgValidationQuality = validationQualities. Median();253 double avgValidationQuality = validationQualities.Select(x => x.Value).Median(); 246 254 247 255 if (Maximization.Value) … … 254 262 // best first (only for maximization 255 263 var orderedDistinctPairs = (from index in Enumerable.Range(0, qualities.Length) 256 select new { Training = qualities[index].Value, Validation = validationQualities[index] }) 257 .Distinct() 264 select new { Training = qualities[index].Value, Validation = validationQualities[index].Value }) 258 265 .OrderBy(x => -x.Training) 259 266 .ToList();
Note: See TracChangeset
for help on using the changeset viewer.