Changeset 17928 for branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs
- Timestamp:
- 04/06/21 13:13:32 (3 years ago)
- Location:
- branches/3026_IntegrationIntoSymSpace
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3026_IntegrationIntoSymSpace
- Property svn:mergeinfo changed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis
- Property svn:mergeinfo changed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis/3.4
- Property svn:mergeinfo changed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs
r17180 r17928 35 35 using HeuristicLab.Problems.DataAnalysis.Symbolic; 36 36 using HeuristicLab.Random; 37 using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression; 38 using HeuristicLab.Problems.DataAnalysis.Symbolic.Classification; 37 39 38 40 namespace HeuristicLab.Algorithms.DataAnalysis { … … 338 340 symbolicProblem.FitnessCalculationPartition.End = SamplesEnd.Value; 339 341 } 342 343 // We need to set the estimation limits because they are recalculated by the problem 344 // whenever the data partitions change. 345 // Instead of explicitly handling all types we could also check the parameters-collection 346 // for a parameter with name "EstimationLimits". 347 SetEstimationLimits(problem, new[] { typeof(SymbolicRegressionSingleObjectiveProblem), 348 typeof(SymbolicRegressionMultiObjectiveProblem), 349 typeof(SymbolicClassificationSingleObjectiveProblem), 350 typeof(SymbolicClassificationMultiObjectiveProblem) }); 351 340 352 clonedAlgorithm.Prepare(); 341 353 clonedAlgorithms.Add(clonedAlgorithm); … … 509 521 foreach (KeyValuePair<string, List<IClassificationSolution>> solutions in resultSolutions) { 510 522 // at least one algorithm (GBT with logistic regression loss) produces a classification solution even though the original problem is a regression problem. 511 var targetVariable = solutions.Value.First().ProblemData.TargetVariable;512 523 var dataset = (Dataset)Problem.ProblemData.Dataset; 513 524 if (ShuffleSamples.Value) { … … 515 526 dataset = dataset.Shuffle(random); 516 527 } 517 var problemDataClone = new ClassificationProblemData(dataset, Problem.ProblemData.AllowedInputVariables, targetVariable); 528 var problemData = (IClassificationProblemData)Problem.ProblemData; 529 var problemDataClone = new ClassificationProblemData(dataset, problemData.AllowedInputVariables, problemData.TargetVariable, problemData.ClassNames, problemData.PositiveClass); 518 530 // set partitions of problem data clone correctly 519 531 problemDataClone.TrainingPartition.Start = SamplesStart.Value; problemDataClone.TrainingPartition.End = SamplesEnd.Value; … … 809 821 } 810 822 #endregion 823 824 #region helper 825 826 private void SetEstimationLimits(IDataAnalysisProblem problem, Type[] types) { 827 foreach (var type in types) { 828 if (type.IsAssignableFrom(problem.GetType())) { 829 var originalLimits = (DoubleLimit)Problem.Parameters["EstimationLimits"].ActualValue; // problem is a clone of Problem 830 var limits = (DoubleLimit)problem.Parameters["EstimationLimits"].ActualValue; 831 limits.Lower = originalLimits.Lower; 832 limits.Upper = originalLimits.Upper; 833 } 834 } 835 } 836 837 #endregion 811 838 } 812 839 }
Note: See TracChangeset
for help on using the changeset viewer.