Algorithm-LibLinear
view release on metacpan or search on metacpan
t/Algorithm/LibLinear/TrainingParameter.t view on Meta::CPAN
use strict;
use warnings;
use Test::Exception;
use Test::Deep;
use Test::More;
BEGIN { use_ok 'Algorithm::LibLinear' }
my $tolerance = 10e-15;
{
my $learner = new_ok 'Algorithm::LibLinear';
cmp_methods(
$learner,
[
cost => num(1, $tolerance),
epsilon => num(0.1, $tolerance),
is_regression_solver => bool(0),
weights => [],
],
);
}
{
my $learner = new_ok 'Algorithm::LibLinear' => [
cost => 10,
epsilon => 0.42,
loss_sensitivity => 0.84,
solver => 'L2R_L2LOSS_SVR_DUAL',
weights => [
+{ label => -1, weight => 0.6, },
+{ label => 1, weight => 0.3, },
],
];
cmp_methods(
$learner,
[
cost => num(10, $tolerance),
epsilon => num(0.42, $tolerance),
is_regression_solver => bool(1),
loss_sensitivity => num(0.84, $tolerance),
weights => [
+{ label => -1, weight => num(0.6, $tolerance), },
+{ label => 1, weight => num(0.3, $tolerance), },
],
],
);
}
my $data_set = Algorithm::LibLinear::DataSet->new(data_set => [
+{ feature => +{}, label => 1 },
]);
my @cases = (
+{ constructor_params => [ cost => 0 ], error_pattern => qr/C <= 0/ },
+{ constructor_params => [ epsilon => 0 ], error_pattern => qr/eps <= 0/ },
+{
constructor_params => [
loss_sensitivity => -1,
solver => 'L2R_L2LOSS_SVR',
],
error_pattern => qr/p < 0/,
},
);
for my $case (@cases) {
my $learner = Algorithm::LibLinear->new(@{ $case->{constructor_params} });
throws_ok {
$learner->train(data_set => $data_set);
} $case->{error_pattern};
throws_ok {
$learner->cross_validation(data_set => $data_set, num_folds => 5);
} $case->{error_pattern};
}
done_testing;
( run in 0.435 second using v1.01-cache-2.11-cpan-796a6f069b2 )