public function testPartitions()
 {
     // Arrange
     $data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
     $labels = [false, false, true, false, false, true, false, false, true, true];
     $set = new DataSet($data, $labels);
     $numberOfPartitions = 5;
     $expectedTestData = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]];
     $expectedTrainingData = [[3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8]];
     $expectedTestLabels = [[false, false], [true, false], [false, true], [false, false], [true, true]];
     $expectedTrainingLabels = [[true, false, false, true, false, false, true, true], [false, false, false, true, false, false, true, true], [false, false, true, false, false, false, true, true], [false, false, true, false, false, true, true, true], [false, false, true, false, false, true, false, false]];
     // Act
     // false means no shuffling
     $partitioner = new CrossValidationRandomPartitioner($set, $numberOfPartitions, false);
     // Assert
     for ($i = 0; $i < $numberOfPartitions; $i++) {
         $currentPartition = $partitioner->getPartition($i);
         $currentTest = $currentPartition->getTestData();
         $currentTraining = $currentPartition->getTrainingData();
         $this->assertEquals($expectedTestData[$i], $currentTest->getData());
         $this->assertEquals($expectedTestLabels[$i], $currentTest->getLabels());
         $this->assertEquals($expectedTrainingData[$i], $currentTraining->getData());
         $this->assertEquals($expectedTrainingLabels[$i], $currentTraining->getLabels());
     }
 }
 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);
 }