diff --git a/src/Phpml/Association/Apriori.php b/src/Phpml/Association/Apriori.php index 76d8624..b6079cc 100644 --- a/src/Phpml/Association/Apriori.php +++ b/src/Phpml/Association/Apriori.php @@ -86,12 +86,11 @@ class Apriori implements Associator public function apriori(): array { $L = []; - $L[1] = $this->items(); - $L[1] = $this->frequent($L[1]); - for ($k = 2; !empty($L[$k - 1]); ++$k) { - $L[$k] = $this->candidates($L[$k - 1]); - $L[$k] = $this->frequent($L[$k]); + $items = $this->frequent($this->items()); + for ($k = 1; !empty($items); ++$k) { + $L[$k] = $items; + $items = $this->frequent($this->candidates($items)); } return $L; diff --git a/tests/Phpml/Association/AprioriTest.php b/tests/Phpml/Association/AprioriTest.php index 8b95237..3ba6901 100644 --- a/tests/Phpml/Association/AprioriTest.php +++ b/tests/Phpml/Association/AprioriTest.php @@ -64,7 +64,6 @@ class AprioriTest extends TestCase $L = $apriori->apriori(); - $this->assertCount(0, $L[3]); $this->assertCount(4, $L[2]); $this->assertTrue($this->invoke($apriori, 'contains', [$L[2], [1, 2]])); $this->assertFalse($this->invoke($apriori, 'contains', [$L[2], [1, 3]])); @@ -204,4 +203,29 @@ class AprioriTest extends TestCase $this->assertEquals($classifier, $restoredClassifier); $this->assertEquals($predicted, $restoredClassifier->predict($testSamples)); } + + public function testAprioriEmpty(): void + { + $sample = []; + + $apriori = new Apriori(0, 0); + $apriori->train($sample, []); + + $L = $apriori->apriori(); + + $this->assertEmpty($L); + } + + public function testAprioriSingleItem(): void + { + $sample = [['a']]; + + $apriori = new Apriori(0, 0); + $apriori->train($sample, []); + + $L = $apriori->apriori(); + + $this->assertEquals([1], array_keys($L)); + $this->assertEquals([['a']], $L[1]); + } }