コード例 #1
0
        public void DecisionTreeLearn_ThreeSplit()
        {
            GlobalVariables.GrowCondition = new GrowCondition(7);

            var synthesisTree = new SynthesisTreeLearn(attributes, learn, validation);

            synthesisTree.Learn();

            var tree = synthesisTree.Tree;

            Assert.AreEqual(1, tree.Root.Branches.Count);
            Assert.AreEqual(1, tree.Root.Branches[0].Branches.Count);
            Assert.AreEqual(1, tree.Root.Branches[0].Branches[0].Branches.Count);
            Assert.AreEqual(1, tree.Root.Branches[0].Branches[0].Branches[0].Branches.Count);
            Assert.AreEqual(3, tree.Root.Branches[0].Branches[0].Branches[0].Branches[0].Branches[0].Branches[0].Branches[0].Output);
            Assert.AreEqual(0, tree.Root.Branches[0].Branches[0].Branches[0].Branches[0].Branches[0].Branches[0].Branches[1].Output);
            Assert.AreEqual(9, tree.Root.Branches[0].Branches[0].Branches[0].Branches[0].Branches[0].Branches[1].Output);
            Assert.AreEqual(1, tree.Root.Branches[0].Branches[0].Branches[0].Branches[0].Branches[1].Branches[0].Output);
            Assert.AreEqual(2, tree.Root.Branches[0].Branches[0].Branches[0].Branches[0].Branches[1].Branches[1].Output);

            int[] actual = tree.Decide(validation)
                           .Select(val => val > 0 ? 0 : 1)
                           .ToArray();

            var areaSize = (double)tree.Decide(validation)
                           .Count(val => val > 0) / validation.Length;

            var confusionMatrix = new Accord.Statistics.Analysis.ConfusionMatrix(actual, validationOutput, 0, 1);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: PatrykOlejniczak/OCCST
        private static void CalculateStatistics(ExperimentSettings settings)
        {
            using (var database = new Database(settings.DatabaseFilePath))
            {
                using (var experiment = database.NewExperiment())
                {
                    try
                    {
                        experiment.SaveIn(settings);

                        experiment["out_totalTime"]          = timer.ElapsedMilliseconds;
                        experiment["out_decisionTreeHeight"] = decisionTree.GetHeight();
                        experiment["in_terms"] = dataStorage.TestInputDataSet[0].Length;

                        if (decisionTree == null)
                        {
                            throw new ArgumentNullException(nameof(decisionTree));
                        }

                        int[] actual = decisionTree.Decide(dataStorage.TestInputDataSet)
                                       .Select(val => val > 0 ? 0 : 1)
                                       .ToArray();

                        var confusionMatrix = new Accord.Statistics.Analysis.ConfusionMatrix(actual, dataStorage.TestOutputDataSet, 0, 1);

                        var validationPropablity =
                            (double)decisionTree.Decide(dataStorage.ValidationDataSet)
                            .Count(val => val > 0) / dataStorage.ValidationDataSet.Length;

                        experiment["in_test_examples"]  = dataStorage.TestOutputDataSet.Length;
                        experiment["in_test_positives"] = confusionMatrix.ActualPositives;
                        experiment["in_test_negatives"] = confusionMatrix.ActualNegatives;

                        experiment["in_learn_examples"]      = dataStorage.LearnDataSet.Length;
                        experiment["in_validation_examples"] = dataStorage.ValidationDataSet.Length;

                        experiment["out_accurancy"]   = confusionMatrix.Accuracy;
                        experiment["out_error"]       = confusionMatrix.Error;
                        experiment["out_sensitivity"] = confusionMatrix.Sensitivity;
                        experiment["out_specificity"] = confusionMatrix.Specificity;

                        experiment["out_efficiency"]   = confusionMatrix.Efficiency;
                        experiment["out_precision"]    = confusionMatrix.Precision;
                        experiment["out_recall"]       = confusionMatrix.Recall;
                        experiment["out_fScore"]       = confusionMatrix.FScore;
                        experiment["out_jaccardIndex"] =
                            (double)confusionMatrix.TruePositives / (confusionMatrix.TruePositives +
                                                                     confusionMatrix.FalseNegatives +
                                                                     confusionMatrix.FalsePositives);

                        experiment["out_falsePositives"] = confusionMatrix.FalsePositives;
                        experiment["out_falseNegatives"] = confusionMatrix.FalseNegatives;
                        experiment["out_trueNegatives"]  = confusionMatrix.TrueNegatives;
                        experiment["out_truePositives"]  = confusionMatrix.TruePositives;
                        experiment["out_measure"]        =
                            StatisticsCalculator.CalculateObjectiveFunction(confusionMatrix.Recall, validationPropablity);
                        experiment["out_matthewsCorrelationCoefficient"] = confusionMatrix.MatthewsCorrelationCoefficient;

                        var rules  = decisionTree.ToRules();
                        var rules2 = new List <Rule>();
                        foreach (var rule in rules)
                        {
                            rules2.Add(new Rule(rule.ToString().Replace(",", ".")));
                        }

                        var constraints = rules2.ReturnUniqueSplitsWithBooleans();

                        experiment["out_constraints"] = constraints.Item1.Count;
                    }
                    catch (Exception e)
                    {
                        experiment["error"] = e.Message;
                    }
                    finally
                    {
                        experiment.Save();
                    }
                }
            }
        }