public void ClassificationDecisionTreeModel_Load() { var(observations, targets) = DataSetUtilities.LoadAptitudeDataSet(); var reader = new StringReader(ClassificationDecisionTreeModelString); var sut = ClassificationDecisionTreeModel.Load(() => reader); var predictions = sut.Predict(observations); var evaluator = new TotalErrorClassificationMetric <double>(); var error = evaluator.Error(targets, predictions); Assert.AreEqual(0.19230769230769232, error, 0.0000001); }
public void BestFirstTreeBuilder_Build_Leaf_Nodes_4() { var(observations, targets) = DataSetUtilities.LoadGlassDataSet(); var sut = new DecisionTreeLearner(new BestFirstTreeBuilder(2000, 4, observations.ColumnCount, 0.000001, 42, new OnlyUniqueThresholdsSplitSearcher(1), new GiniClassificationImpurityCalculator())); var model = new ClassificationDecisionTreeModel(sut.Learn(observations, targets)); var predictions = model.Predict(observations); var evaluator = new TotalErrorClassificationMetric <double>(); var actual = evaluator.Error(targets, predictions); Assert.AreEqual(0.37383177570093457, actual, 0.00001); }
public void ClassificationDecisionTreeModel_Load() { var parser = new CsvParser(() => new StringReader(Resources.AptitudeData)); var observations = parser.EnumerateRows(v => v != "Pass").ToF64Matrix(); var targets = parser.EnumerateRows("Pass").ToF64Vector(); var reader = new StringReader(ClassificationDecisionTreeModelString); var sut = ClassificationDecisionTreeModel.Load(() => reader); var predictions = sut.Predict(observations); var evaluator = new TotalErrorClassificationMetric <double>(); var error = evaluator.Error(targets, predictions); Assert.AreEqual(0.19230769230769232, error, 0.0000001); }
public void BestFirstTreeBuilder_Build_Leaf_Nodes_4() { var parser = new CsvParser(() => new StringReader(Resources.Glass)); var observations = parser.EnumerateRows(v => v != "Target").ToF64Matrix(); var targets = parser.EnumerateRows("Target").ToF64Vector(); var rows = targets.Length; var sut = new DecisionTreeLearner(new BestFirstTreeBuilder(2000, 4, observations.ColumnCount, 0.000001, 42, new OnlyUniqueThresholdsSplitSearcher(1), new GiniClassificationImpurityCalculator())); var model = new ClassificationDecisionTreeModel(sut.Learn(observations, targets)); var predictions = model.Predict(observations); var evaluator = new TotalErrorClassificationMetric <double>(); var actual = evaluator.Error(targets, predictions); Assert.AreEqual(0.37383177570093457, actual, 0.00001); }
ClassificationDecisionTreeModel CreateTree(F64Matrix observations, double[] targets, int[] indices, Random random) { var learner = new DecisionTreeLearner( new DepthFirstTreeBuilder(m_maximumTreeDepth, m_featuresPrSplit, m_minimumInformationGain, m_random.Next(), new RandomSplitSearcher(m_minimumSplitSize, m_random.Next()), new GiniClasificationImpurityCalculator())); var treeIndicesLength = (int)Math.Round(m_subSampleRatio * (double)indices.Length); var treeIndices = new int[treeIndicesLength]; for (int j = 0; j < treeIndicesLength; j++) { treeIndices[j] = indices[random.Next(indices.Length)]; } var model = new ClassificationDecisionTreeModel(learner.Learn(observations, targets, treeIndices)); return(model); }
public void ClassificationModel_Save_Load() { #region learner creation // Use StreamReader(filepath) when running from filesystem var parser = new CsvParser(() => new StringReader(Resources.winequality_white)); var targetName = "quality"; // read feature matrix var observations = parser.EnumerateRows(c => c != targetName) .ToF64Matrix(); // read classification targets var targets = parser.EnumerateRows(targetName) .ToF64Vector(); // create learner var learner = new ClassificationDecisionTreeLearner(); #endregion // learns a ClassificationDecisionTreeModel var model = learner.Learn(observations, targets); var writer = new StringWriter(); model.Save(() => writer); // save to file //model.Save(() => new StreamWriter(filePath)); var text = writer.ToString(); var loadedModel = ClassificationDecisionTreeModel.Load(() => new StringReader(text)); // load from file //ClassificationDecisionTreeModel.Load(() => new StreamReader(filePath)); }