AI-MaxEntropy
view release on metacpan or search on metacpan
t/03-learn_by_gis.t view on Meta::CPAN
use strict;
use warnings;
use Test::More tests => 3;
use Test::Number::Delta within => 1e-5;
my $__;
sub NAME { $__ = shift };
###
NAME 'Load the module';
BEGIN { use_ok 'AI::MaxEntropy' }
my ($lambda, $d_lambda, $p1_f, $n);
my $zero = 1e-5;
my $me = AI::MaxEntropy->new();
$me->see(['round', 'smooth', 'red'] => 'apple' => 2);
$me->see(['long', 'smooth', 'yellow'] => 'banana' => 3);
$me->{algorithm}->{type} = 'gis';
###
NAME 'The first iteration';
$me->{algorithm}->{progress_cb} =
sub { ($lambda, $d_lambda) = ($_[1], $_[2]); 1 };
$me->learn;
$p1_f = [
2 * (exp(0) / (exp(0) + exp(0))),
2 * (exp(0) / (exp(0) + exp(0))) + 3 * (exp(0) / (exp(0) + exp(0))),
2 * (exp(0) / (exp(0) + exp(0))),
3 * (exp(0) / (exp(0) + exp(0))),
3 * (exp(0) / (exp(0) + exp(0))),
2 * (exp(0) / (exp(0) + exp(0))),
2 * (exp(0) / (exp(0) + exp(0))) + 3 * (exp(0) / (exp(0) + exp(0))),
2 * (exp(0) / (exp(0) + exp(0))),
3 * (exp(0) / (exp(0) + exp(0))),
3 * (exp(0) / (exp(0) + exp(0)))
];
delta_ok
[
$lambda,
$d_lambda
],
[
[
(1.0 / 3) * log(2 / $p1_f->[0]),
(1.0 / 3) * log(2 / $p1_f->[1]),
(1.0 / 3) * log(2 / $p1_f->[2]),
(1.0 / 3) * log($zero / $p1_f->[3]),
(1.0 / 3) * log($zero / $p1_f->[4]),
(1.0 / 3) * log($zero / $p1_f->[5]),
(1.0 / 3) * log(3 / $p1_f->[6]),
(1.0 / 3) * log($zero / $p1_f->[7]),
(1.0 / 3) * log(3 / $p1_f->[8]),
(1.0 / 3) * log(3 / $p1_f->[9])
],
[
(1.0 / 3) * log(2 / $p1_f->[0]),
(1.0 / 3) * log(2 / $p1_f->[1]),
(1.0 / 3) * log(2 / $p1_f->[2]),
(1.0 / 3) * log($zero / $p1_f->[3]),
(1.0 / 3) * log($zero / $p1_f->[4]),
(1.0 / 3) * log($zero / $p1_f->[5]),
(1.0 / 3) * log(3 / $p1_f->[6]),
(1.0 / 3) * log($zero / $p1_f->[7]),
( run in 0.782 second using v1.01-cache-2.11-cpan-39bf76dae61 )