Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.
<?php

declare(strict_types=1);

namespace Phpml\FeatureSelection;

use Phpml\Exception\InvalidArgumentException;
use Phpml\Math\Matrix;
use Phpml\Math\Statistic\Variance;
use Phpml\Transformer;

final class VarianceThreshold implements Transformer
{
    /**
     * @var float
     */
    private $threshold;

    /**
     * @var array
     */
    private $variances = [];

    /**
     * @var array
     */
    private $keepColumns = [];

    public function __construct(float $threshold = 0.0)
    {
        if ($threshold < 0) {
            throw new InvalidArgumentException('Threshold can\'t be lower than zero');
        }

        $this->threshold = $threshold;
    }

    public function fit(array $samples, ?array $targets = null): void
    {
< $this->variances = array_map(function (array $column) {
> $this->variances = array_map(static function (array $column): float {
return Variance::population($column); }, Matrix::transposeArray($samples)); foreach ($this->variances as $column => $variance) { if ($variance > $this->threshold) { $this->keepColumns[$column] = true; } } }
< public function transform(array &$samples): void
> public function transform(array &$samples, ?array &$targets = null): void
{ foreach ($samples as &$sample) { $sample = array_values(array_intersect_key($sample, $this->keepColumns)); } } }