Skip to content

Commit

Permalink
Fix division by zero in ANOVA for small size dataset (#391)
Browse files Browse the repository at this point in the history
  • Loading branch information
akondas authored Jun 22, 2019
1 parent 4590d5c commit 1a856c9
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/Math/Statistic/ANOVA.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ public static function oneWayF(array $samples): array
return $s / $dfbn;
}, $ssbn);
$msw = array_map(function ($s) use ($dfwn) {
if ($dfwn === 0) {
return 1;
}

return $s / $dfwn;
}, $sswn);

Expand Down
42 changes: 42 additions & 0 deletions tests/FeatureSelection/SelectKBestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,48 @@ public function testSelectKBestWithRegressionScoring(): void
);
}

public function testSelectKBestIssue386(): void
{
$samples = [
[
0.0006729998475705993,
0.0,
0.999999773507577,
0.0,
0.0,
6.66666515671718E-7,
3.33333257835859E-6,
6.66666515671718E-6,
],
[
0.0006729998475849566,
0.0,
0.9999997735289103,
0.0,
0.0,
6.666665156859402E-7,
3.3333325784297012E-6,
1.3333330313718804E-6,
],
];

$targets = [15.5844, 4.45284];

$selector = new SelectKBest(2);
$selector->fit($samples, $targets);

self::assertEquals([
-2.117582368135751E-22,
0.0,
0.0,
0.0,
0.0,
1.0097419586828951E-28,
0.0,
1.4222215779620095E-11,
], $selector->scores());
}

public function testThrowExceptionOnEmptyTargets(): void
{
$this->expectException(InvalidArgumentException::class);
Expand Down

0 comments on commit 1a856c9

Please sign in to comment.