Algorithm-NaiveBayes
view release on metacpan or search on metacpan
lib/Algorithm/NaiveBayes/Util.pm view on Meta::CPAN
package Algorithm::NaiveBayes::Util;
use strict;
use base qw(Exporter);
use vars qw(@EXPORT_OK);
@EXPORT_OK = qw(sum sum_hash max variance add_hash rescale);
use List::Util qw(max sum);
sub sum_hash {
my $href = shift;
return sum(values %$href);
}
sub variance {
my $array = shift;
return 0 unless @$array > 1;
my $mean = @_ ? shift : sum($array) / @$array;
my $var = 0;
$var += ($_ - $mean)**2 foreach @$array;
return $var / (@$array - 1);
}
sub add_hash {
my ($first, $second) = @_;
foreach my $k (keys %$second) {
$first->{$k} += $second->{$k};
}
}
sub rescale {
my ($scores) = @_;
# Scale everything back to a reasonable area in logspace (near zero), un-loggify, and normalize
my $total = 0;
my $max = max(values %$scores);
foreach (values %$scores) {
$_ = exp($_ - $max);
$total += $_**2;
}
$total = sqrt($total);
foreach (values %$scores) {
$_ /= $total;
}
}
1;
( run in 1.061 second using v1.01-cache-2.11-cpan-39bf76dae61 )