From 8976047cbc9f5ff54fb9171734fe1d5a17f2e00e Mon Sep 17 00:00:00 2001 From: Arkadiusz Kondas Date: Sat, 3 Mar 2018 16:04:21 +0100 Subject: [PATCH] Add removeColumns function to ArrayDataset (#249) * Add removeColumns function to ArrayDataset * Add removeColumns to docs * Fix cs --- .../datasets/array-dataset.md | 20 +++++++++++++++++++ src/Dataset/ArrayDataset.php | 19 ++++++++++++++++++ tests/Dataset/ArrayDatasetTest.php | 11 ++++++++++ 3 files changed, 50 insertions(+) diff --git a/docs/machine-learning/datasets/array-dataset.md b/docs/machine-learning/datasets/array-dataset.md index de49556..8bbcc37 100644 --- a/docs/machine-learning/datasets/array-dataset.md +++ b/docs/machine-learning/datasets/array-dataset.md @@ -8,6 +8,8 @@ Helper class that holds data as PHP `array` type. Implements the `Dataset` inter * $labels - (array) of labels ``` +use Phpml\Dataset\ArrayDataset; + $dataset = new ArrayDataset([[1, 1], [2, 1], [3, 2], [4, 1]], ['a', 'a', 'b', 'b']); ``` @@ -19,3 +21,21 @@ To get samples or labels you can use getters: $dataset->getSamples(); $dataset->getTargets(); ``` + +### Remove columns + +You can remove columns by index numbers, for example: + +``` +use Phpml\Dataset\ArrayDataset; + +$dataset = new ArrayDataset( + [[1,2,3,4], [2,3,4,5], [3,4,5,6], [4,5,6,7]], + ['a', 'a', 'b', 'b'] +); + +$dataset->removeColumns([0,2]); + +// now from each sample column 0 and 2 are removed +// [[2,4], [3,5], [4,6], [5,7]] +``` diff --git a/src/Dataset/ArrayDataset.php b/src/Dataset/ArrayDataset.php index 618814a..e0e7822 100644 --- a/src/Dataset/ArrayDataset.php +++ b/src/Dataset/ArrayDataset.php @@ -40,4 +40,23 @@ class ArrayDataset implements Dataset { return $this->targets; } + + /** + * @param int[] $columns + */ + public function removeColumns(array $columns): void + { + foreach ($this->samples as &$sample) { + $this->removeColumnsFromSample($sample, $columns); + } + } + + private function removeColumnsFromSample(array &$sample, array $columns): void + { + foreach ($columns as $index) { + unset($sample[$index]); + } + + $sample = array_values($sample); + } } diff --git a/tests/Dataset/ArrayDatasetTest.php b/tests/Dataset/ArrayDatasetTest.php index bca9e43..0431959 100644 --- a/tests/Dataset/ArrayDatasetTest.php +++ b/tests/Dataset/ArrayDatasetTest.php @@ -26,4 +26,15 @@ class ArrayDatasetTest extends TestCase $this->assertEquals($samples, $dataset->getSamples()); $this->assertEquals($labels, $dataset->getTargets()); } + + public function testRemoveColumns(): void + { + $dataset = new ArrayDataset( + [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]], + ['a', 'a', 'b', 'b'] + ); + $dataset->removeColumns([0, 2]); + + $this->assertEquals([[2, 4], [3, 5], [4, 6], [5, 7]], $dataset->getSamples()); + } }