public function train(Dataset $dataset) : void
    {
        if (!$dataset instanceof Labeled) {
            throw new InvalidArgumentException('This Estimator requires a'
                . ' Labeled training set.');
        }

        DatasetIsCompatibleWithEstimator::check($dataset, $this);

        $classes = $dataset->possibleOutcomes();

        $this->classes = $classes;
        $this->weights = array_fill_keys($classes, 0);

        $this->means = $this->variances = array_fill_keys($classes, []);

        foreach ($dataset->stratify() as $class => $stratum) {
            $means = $variances = [];

            foreach ($stratum->columns() as $values) {
                [$mean, $variance] = Stats::meanVar($values);

                $means[] = $mean;
                $variances[] = $variance ?: EPSILON;
            }

            $this->means[$class] = $means;
            $this->variances[$class] = $variances;

            $this->weights[$class] += $stratum->numRows();
        }

        if ($this->fitPriors) {
            $this->priors = [];

            $total = array_sum($this->weights) ?: EPSILON;

            foreach ($this->weights as $class => $weight) {
                $this->priors[$class] = log($weight / $total);
            }
        }
    }
public function train(Dataset $dataset) : void
    {
        if (!$dataset instanceof Labeled) {
            throw new InvalidArgumentException('This Estimator requires a'
                . ' Labeled training set.');
        }

        DatasetIsCompatibleWithEstimator::check($dataset, $this);

        $classes = $dataset->possibleOutcomes();

        $this->classes = $classes;
        $this->weights = array_fill_keys($classes, 0);

        $this->means = $this->variances = array_fill_keys($classes, []);

        foreach ($dataset->stratify() as $class => $stratum) {
            $means = $variances = [];

            foreach ($stratum->columns() as $values) {
                [$mean, $variance] = Stats::meanVar($values);

                $means[] = $mean;
                $variances[] = $variance ?: EPSILON;
            }

            $this->means[$class] = $means;
            $this->variances[$class] = $variances;

            $this->weights[$class] += $stratum->numRows();
        }

        if ($this->fitPriors) {
            $this->priors = [];

            $total = array_sum($this->weights) ?: EPSILON;

            foreach ($this->weights as $class => $weight) {
                $this->priors[$class] = log($weight / $total);
            }
        }
    }
public function train ( Dataset $ dataset ) : void { if ( ! $ dataset instanceof Labeled ) { throw new InvalidArgumentException ( 'This Estimator requires a' . ' Labeled training set.' ) ; } DatasetIsCompatibleWithEstimator :: check ( $ dataset , $ this ) ; $ classes = $ dataset -> possibleOutcomes ( ) ; $ this -> classes = $ classes ; $ this -> weights = array_fill_keys ( $ classes , 0 ) ; $ this -> means = $ this -> variances = array_fill_keys ( $ classes , [ ] ) ; foreach ( $ dataset -> stratify ( ) as $ class => $ stratum ) { $ means = $ variances = [ ] ; foreach ( $ stratum -> columns ( ) as $ values ) { [ $ mean , $ variance ] = Stats :: meanVar ( $ values ) ; $ means [ ] = $ mean ; $ variances [ ] = $ variance ? : EPSILON ; } $ this -> means [ $ class ] = $ means ; $ this -> variances [ $ class ] = $ variances ; $ this -> weights [ $ class ] += $ stratum -> numRows ( ) ; } if ( $ this -> fitPriors ) { $ this -> priors = [ ] ; $ total = array_sum ( $ this -> weights ) ? : EPSILON ; foreach ( $ this -> weights as $ class => $ weight ) { $ this -> priors [ $ class ] = log ( $ weight / $ total ) ; } } }
Compute the necessary statistics to estimate a probability density for
each feature column.

@param \Rubix\ML\Datasets\Dataset $dataset
@throws \InvalidArgumentException
Compute the necessary statistics to estimate a probability density for each feature column .