AI-MaxEntropy
view release on metacpan - search on metacpan
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]),
(1.0 / 3) * log(3 / $p1_f->[8]),
(1.0 / 3) * log(3 / $p1_f->[9])
]
],
$__;
###
NAME 'The second iteration';
my @l = @$lambda;
$me->{algorithm}->{progress_cb} =
sub { ($lambda, $d_lambda) = ($_[1], $_[2]); $n++; $n >= 2 ? 1 : 0 };
$me->learn;
my $p0 = exp($l[0] + $l[1] + $l[2]) + exp($l[5] + $l[6] + $l[7]);
my $p0_0 = exp($l[0] + $l[1] + $l[2]) / $p0;
my $p0_1 = exp($l[5] + $l[6] + $l[7]) / $p0;
my $p1 = exp($l[6] + $l[8] + $l[9]) + exp($l[1] + $l[3] + $l[4]);
my $p1_0 = exp($l[1] + $l[3] + $l[4]) / $p1;
my $p1_1 = exp($l[6] + $l[8] + $l[9]) / $p1;
$p1_f = [
2 * $p0_0,
2 * $p0_0 + 3 * $p1_0,
2 * $p0_0,
3 * $p1_0,
3 * $p1_0,
2 * $p0_1,
2 * $p0_1 + 3 * $p1_1,
2 * $p0_1,
3 * $p1_1,
3 * $p1_1
];
delta_ok
[
$lambda,
$d_lambda
],
[
[
$l[0] + (1.0 / 3) * log(2 / $p1_f->[0]),
$l[1] + (1.0 / 3) * log(2 / $p1_f->[1]),
$l[2] + (1.0 / 3) * log(2 / $p1_f->[2]),
$l[3] + (1.0 / 3) * log($zero / $p1_f->[3]),
$l[4] + (1.0 / 3) * log($zero / $p1_f->[4]),
$l[5] + (1.0 / 3) * log($zero / $p1_f->[5]),
$l[6] + (1.0 / 3) * log(3 / $p1_f->[6]),
$l[7] + (1.0 / 3) * log($zero / $p1_f->[7]),
$l[8] + (1.0 / 3) * log(3 / $p1_f->[8]),
$l[9] + (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]),
(1.0 / 3) * log(3 / $p1_f->[8]),
(1.0 / 3) * log(3 / $p1_f->[9])
]
],
$__;
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.452 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )