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); }
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(); } } } }