コード例 #1
0
 public override void Execute() {
   IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
   var solutionGroups = from pair in GetDataAnalysisResults(activeView)
                        group pair.Value by pair.Key into g
                        select g;
   foreach (var group in solutionGroups) {
     // check if all solutions in the group are either only regression or only classification solutions
     if (group.All(s => s is IRegressionSolution)) {
       // show all regression ensembles
       // N.B. this assumes all solutions are based on the same problem data!
       // the problem data is not cloned because the individual solutions were already cloned
       var problemData = group.OfType<IRegressionSolution>().First().ProblemData;
       var ensemble = new RegressionEnsembleSolution(problemData);
       ensemble.Name = group.Key + " ensemble";
       var nestedSolutions = group.OfType<RegressionEnsembleSolution>().SelectMany(e => e.RegressionSolutions);
       var solutions = group.Where(s => !(s is RegressionEnsembleSolution)).OfType<IRegressionSolution>();
       ensemble.AddRegressionSolutions(nestedSolutions.Concat(solutions));
       MainFormManager.MainForm.ShowContent(ensemble);
     } else if (group.All(s => s is IClassificationSolution)) {
       // show all classification ensembles
       // N.B. this assumes all solutions are based on the same problem data!
       // the problem data is not cloned because the individual solutions were already cloned
       var problemData = (ClassificationProblemData)group.OfType<IClassificationSolution>().First().ProblemData;
       var ensemble = new ClassificationEnsembleSolution(Enumerable.Empty<IClassificationModel>(), problemData);
       ensemble.Name = group.Key + " ensemble";
       var nestedSolutions = group.OfType<ClassificationEnsembleSolution>().SelectMany(e => e.ClassificationSolutions);
       var solutions = group.Where(s => !(s is ClassificationEnsembleSolution)).OfType<IClassificationSolution>();
       ensemble.AddClassificationSolutions(nestedSolutions.Concat(solutions));
       MainFormManager.MainForm.ShowContent(ensemble);
     }
   }
 }
コード例 #2
0
        private IEnumerable <IResult> ExtractAndAggregateRegressionSolutions(IEnumerable <KeyValuePair <string, IItem> > resultCollections)
        {
            Dictionary <string, List <IRegressionSolution> > resultSolutions = new Dictionary <string, List <IRegressionSolution> >();

            foreach (var result in resultCollections)
            {
                var regressionSolution = result.Value as IRegressionSolution;
                if (regressionSolution != null)
                {
                    if (resultSolutions.ContainsKey(result.Key))
                    {
                        resultSolutions[result.Key].Add(regressionSolution);
                    }
                    else
                    {
                        resultSolutions.Add(result.Key, new List <IRegressionSolution>()
                        {
                            regressionSolution
                        });
                    }
                }
            }
            List <IResult> aggregatedResults = new List <IResult>();

            foreach (KeyValuePair <string, List <IRegressionSolution> > solutions in resultSolutions)
            {
                // clone manually to correctly clone references between cloned root objects
                Cloner cloner = new Cloner();
                if (ShuffleSamples.Value)
                {
                    var dataset         = (Dataset)Problem.ProblemData.Dataset;
                    var random          = new FastRandom(seed);
                    var shuffledDataset = dataset.Shuffle(random);
                    cloner.RegisterClonedObject(dataset, shuffledDataset);
                }
                var problemDataClone = (IRegressionProblemData)cloner.Clone(Problem.ProblemData);
                // set partitions of problem data clone correctly
                problemDataClone.TrainingPartition.Start = SamplesStart.Value; problemDataClone.TrainingPartition.End = SamplesEnd.Value;
                problemDataClone.TestPartition.Start     = SamplesStart.Value; problemDataClone.TestPartition.End = SamplesEnd.Value;
                // clone models
                var ensembleSolution = new RegressionEnsembleSolution(problemDataClone);
                ensembleSolution.AddRegressionSolutions(solutions.Value);

                aggregatedResults.Add(new Result(solutions.Key + " (ensemble)", ensembleSolution));
            }
            List <IResult> flattenedResults = new List <IResult>();

            CollectResultsRecursively("", aggregatedResults, flattenedResults);
            return(flattenedResults);
        }
コード例 #3
0
        public override void Execute()
        {
            IContentView activeView     = MainFormManager.MainForm.ActiveView as IContentView;
            var          solutionGroups = from pair in GetDataAnalysisResults(activeView)
                                          group pair.Value by pair.Key into g
                                          select g;

            foreach (var group in solutionGroups)
            {
                // check if all solutions in the group are either only regression or only classification solutions
                if (group.All(s => s is IRegressionSolution))
                {
                    // show all regression ensembles
                    // N.B. this assumes all solutions are based on the same problem data!
                    // the problem data is not cloned because the individual solutions were already cloned
                    var problemData = group.OfType <IRegressionSolution>().First().ProblemData;
                    var ensemble    = new RegressionEnsembleSolution(problemData);
                    ensemble.Name = group.Key + " ensemble";
                    var nestedSolutions = group.OfType <RegressionEnsembleSolution>().SelectMany(e => e.RegressionSolutions);
                    var solutions       = group.Where(s => !(s is RegressionEnsembleSolution)).OfType <IRegressionSolution>();
                    ensemble.AddRegressionSolutions(nestedSolutions.Concat(solutions));
                    MainFormManager.MainForm.ShowContent(ensemble);
                }
                else if (group.All(s => s is IClassificationSolution))
                {
                    // show all classification ensembles
                    // N.B. this assumes all solutions are based on the same problem data!
                    // the problem data is not cloned because the individual solutions were already cloned
                    var problemData = (ClassificationProblemData)group.OfType <IClassificationSolution>().First().ProblemData;
                    var ensemble    = new ClassificationEnsembleSolution(Enumerable.Empty <IClassificationModel>(), problemData);
                    ensemble.Name = group.Key + " ensemble";
                    var nestedSolutions = group.OfType <ClassificationEnsembleSolution>().SelectMany(e => e.ClassificationSolutions);
                    var solutions       = group.Where(s => !(s is ClassificationEnsembleSolution)).OfType <IClassificationSolution>();
                    ensemble.AddClassificationSolutions(nestedSolutions.Concat(solutions));
                    MainFormManager.MainForm.ShowContent(ensemble);
                }
            }
        }