public function testAccuracy()
 {
     // Arrange
     $actual = [true, true, false, false, true];
     $predicted = [true, false, true, false, false];
     $testSet = [null, null, null, null, null];
     $results = new RunnerResults($predicted, $actual, $testSet);
     // Act
     $accuracy = $results->getAccuracy();
     // Assert
     $this->assertEquals(2.0 / 5.0, $accuracy);
 }
 public function run(array $dataSet, array $dataSetLabels)
 {
     // Generate folds
     $partitioner = new CrossValidationRandomPartitioner(new DataSet($dataSet, $dataSetLabels), $this->numberOfPartitions);
     $resultsList = [];
     for ($i = 0; $i < $this->numberOfPartitions; $i++) {
         // For each fold, train and classify
         $currentPartition = $partitioner->getPartition($i);
         $currentTest = $currentPartition->getTestData();
         $currentTraining = $currentPartition->getTrainingData();
         $classifier = new $this->classifierClassName($currentTraining->getData(), $currentTraining->getLabels());
         $predicted = $this->classify($classifier, $currentTest->getData());
         $resultsList[] = new RunnerResults($predicted, $currentTest->getLabels(), $currentTest->getData());
     }
     return RunnerResults::combine($resultsList);
 }
 public function format(RunnerResults $results)
 {
     return sprintf(self::$format, count($results->getTestSet()), $results->getFalsePositives(), $results->getFalseNegatives(), $results->getPrecision(), $results->getRecall(), $results->getSpecificity(), $results->getAccuracy(), $results->getFMeasure());
 }