private float GetAUROC(F64Matrix observations, double[] targets) { // print the raw data being used for classification PrintArray(observations); PrintVector(targets); // split the data into training and test set var splitter = new RandomTrainingTestIndexSplitter <double>(trainingPercentage: 0.5); var trainingTestSplit = splitter.SplitSet(observations, targets); var trainSet = trainingTestSplit.TrainingSet; var testSet = trainingTestSplit.TestSet; // train the model var learner = new ClassificationRandomForestLearner(); var model = learner.Learn(trainSet.Observations, trainSet.Targets); // make the predictions from the test set var testPredictions = model.PredictProbability(testSet.Observations); // create the metric and measure the error var metric = new RocAucClassificationProbabilityMetric(1); var testError = (float)metric.Error(testSet.Targets, testPredictions); if (testError < .5f) { testError = 1f - testError; } return(testError); }
public void RocAucClassificationMetric_Error_Not_Binary() { var targets = new double[] { 0, 1, 2 }; var probabilities = new ProbabilityPrediction[0]; var sut = new RocAucClassificationProbabilityMetric(1); var actual = sut.Error(targets, probabilities); }
public void RocAucClassificationMetric_Error() { var targets = new double[] { 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1 }; var probabilities = new ProbabilityPrediction[] { new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.052380952 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.020725389 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.993377483 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.020725389 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.020725389 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.111111111 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.193377483 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.793377483 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.020725389 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.012345679 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.885860173 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.714285714 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.985860173 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.020725389 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.985860173 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.993377483 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.993377483 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.954545455 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.020725389 } }), new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.020725389 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.985860173 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 0.985860173 } }) }; var sut = new RocAucClassificationProbabilityMetric(1); var actual = sut.Error(targets, probabilities); Assert.AreEqual(0.0085470085470086277, actual, 0.00001); }
public void RocAucClassificationMetric_Error_No_Error() { var targets = new double[] { 0, 1 }; var probabilities = new ProbabilityPrediction[] { new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0 }, { 1.0, 0.0 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 1 } }) }; var sut = new RocAucClassificationProbabilityMetric(1); var actual = sut.Error(targets, probabilities); Assert.AreEqual(0.0, actual); }
public void RocAucClassificationMetric_ErrorString() { var targets = new double[] { 0, 1 }; var probabilities = new ProbabilityPrediction[] { new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0 }, { 1.0, 0.0 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 1 } }) }; var sut = new RocAucClassificationProbabilityMetric(1); var actual = sut.ErrorString(targets, probabilities); var expected = ";0;1;0;1\r\n0;1.000;0.000;100.000;0.000\r\n1;0.000;1.000;0.000;100.000\r\nError: 0.000\r\n"; Assert.AreEqual(expected, actual); }
public void RocAucClassificationMetric_Error_Only_Negative_Targets() { var positives = Enumerable.Range(0, 10).Select(s => 0.0).ToList(); var targets = positives.ToArray(); var probabilities = targets .Select(s => new ProbabilityPrediction(0.0, new Dictionary <double, double> { { 0.0, 1.0 }, { 1.0, 0.0 } })) .ToArray(); var sut = new RocAucClassificationProbabilityMetric(1); sut.Error(targets, probabilities); }
public void RocAucClassificationMetric_ErrorString_TargetStringMapping() { var targets = new double[] { 0, 1 }; var probabilities = new ProbabilityPrediction[] { new ProbabilityPrediction(0, new Dictionary <double, double> { { 0, 0 }, { 1.0, 0.0 } }), new ProbabilityPrediction(1, new Dictionary <double, double> { { 0, 0.0 }, { 1.0, 1 } }) }; var sut = new RocAucClassificationProbabilityMetric(1); var targetStringMapping = new Dictionary <double, string> { { 0, "Negative" }, { 1, "Positive" } }; var actual = sut.ErrorString(targets, probabilities, targetStringMapping); var expected = ";Negative;Positive;Negative;Positive\r\nNegative;1.000;0.000;100.000;0.000\r\nPositive;0.000;1.000;0.000;100.000\r\nError: 0.000\r\n"; Assert.AreEqual(expected, actual); }
public void RocAucClassificationMetric_Error_Always_Positve() { var positives = Enumerable.Range(0, 800).Select(s => 1.0).ToList(); var negatives = Enumerable.Range(0, 200).Select(s => 0.0).ToList(); positives.AddRange(negatives); var targets = positives.ToArray(); var probabilities = targets .Select(s => s == 0 ? new ProbabilityPrediction(0.0, new Dictionary <double, double> { { 0.0, 1.0 }, { 1.0, 1.0 } }) : new ProbabilityPrediction(1.0, new Dictionary <double, double> { { 0.0, 1.0 }, { 1.0, 1.0 } })) .ToArray(); var sut = new RocAucClassificationProbabilityMetric(1); var actual = sut.Error(targets, probabilities); Assert.AreEqual(0.5, actual, 0.0001); }