$msbValue) { $f[$index] = $msbValue / $msw[$index]; } return $f; } private static function sumOfSquaresPerFeature(array $samples): array { $sum = array_fill(0, count($samples[0][0]), 0); foreach ($samples as $class) { foreach ($class as $sample) { foreach ($sample as $index => $feature) { $sum[$index] += $feature ** 2; } } } return $sum; } private static function sumOfFeaturesPerClass(array $samples): array { return array_map(static function (array $class): array { $sum = array_fill(0, count($class[0]), 0); foreach ($class as $sample) { foreach ($sample as $index => $feature) { $sum[$index] += $feature; } } return $sum; }, $samples); } private static function sumOfSquares(array $sums): array { $squares = array_fill(0, count($sums[0]), 0); foreach ($sums as $row) { foreach ($row as $index => $sum) { $squares[$index] += $sum; } } return array_map(static function ($sum) { return $sum ** 2; }, $squares); } private static function squaresSum(array $sums): array { foreach ($sums as &$row) { foreach ($row as &$sum) { $sum **= 2; } } return $sums; } private static function calculateSsbn(array $samples, array $sumSamplesSquare, array $samplesPerClass, array $squareSumSamples, int $allSamples): array { $ssbn = array_fill(0, count($samples[0][0]), 0); foreach ($sumSamplesSquare as $classIndex => $class) { foreach ($class as $index => $feature) { $ssbn[$index] += $feature / $samplesPerClass[$classIndex]; } } foreach ($squareSumSamples as $index => $sum) { $ssbn[$index] -= $sum / $allSamples; } return $ssbn; } private static function calculateSswn(array $ssbn, array $ssAllSamples, array $squareSumSamples, int $allSamples): array { $sswn = []; foreach ($ssAllSamples as $index => $ss) { $sswn[$index] = ($ss - $squareSumSamples[$index] / $allSamples) - $ssbn[$index]; } return $sswn; } }