Example #1
0
        public static List <ResultObject> EvaluateACOMinerDR_WekaClassifier_Multi(string algorithm, string trainingSetPath, string testSetPath, Dataset trainingSet, bool useAttributes, bool useInstances)
        {
            Classifier classifier = WekaNETBridge.WekaClassification.GetWekaClassifier(algorithm, trainingSetPath);

            DefaultDRHeuristicCalculator calculator  = new DefaultDRHeuristicCalculator();
            DRComponentInvalidator       invalidator = new DRComponentInvalidator();


            WekaNETBridge.WekaClassification wekaClassification = new WekaNETBridge.WekaClassification(trainingSetPath, classifier);

            WekaClassificationQualityEvaluator evaluator = new WekaClassificationQualityEvaluator(wekaClassification, !useAttributes);

            DRLocalSearch localSearch = new DRLocalSearch(evaluator);

            Problem <DRComponent> problem = new Problem <DRComponent>(invalidator, calculator, evaluator, localSearch);

            ADRMiner acominer = new ADRMiner(maxIterations, colonySize, convergenceIterations, problem, useAttributes, useInstances, false, trainingSet);

            acominer.OnPostAntSolutionContruction += OnPostAntSolutionContruction;
            acominer.OnPostColonyIteration        += OnPostColonyIteration;

            acominer.Initialize();
            acominer.Work();


            List <ResultObject> results = new List <ResultObject>();

            foreach (string algo in WekaNETBridge.WekaClassification.GetWekaAlgorithmNames())
            {
                Classifier currentClassifier = WekaNETBridge.WekaClassification.GetWekaClassifier(algo, trainingSetPath);

                WekaNETBridge.WekaClassifier final = evaluator.CreateWekaClassifier(currentClassifier, acominer.BestAnt.Solution);

                double quality           = WekaNETBridge.WekaClassification.EvaluateClassifier(final, testSetPath);
                double attribueReduction = acominer.BestAnt.Solution.FeatureCount() / (double)trainingSet.Metadata.Attributes.Length;
                double instanceReduction = acominer.BestAnt.Solution.InstanceCount() / (double)trainingSet.Size;

                ResultObject result = new ResultObject()
                {
                    Quality = quality, AttributeReduction = attribueReduction, InstanceReduciton = instanceReduction
                };

                results.Add(result);
            }

            return(results);
        }