Algorithm-AM
view release on metacpan or search on metacpan
lib/Algorithm/AM/Batch.pm view on Meta::CPAN
}
if($self->end_repeat_hook){
# pass in self, test item, data, and result
$self->end_repeat_hook->($self, $test_item,
$iteration, $excluded_items, $result);
}
push @item_results, $result;
$iteration++;
}
if($self->end_test_hook){
$self->end_test_hook->($self, $test_item, @item_results);
}
push @all_results, @item_results;
}
if($log->is_info){
my ( $sec, $min, $hour ) = localtime();
$log->info(
sprintf( "Time: %2s:%02s:%02s", $hour, $min, $sec ) );
}
if($self->end_hook){
$self->end_hook->($self, @all_results);
}
$self->_set_test_set(undef);
return @all_results;
}
# log the summary printouts from the input result object
sub _log_result {
my ($result) = @_;
$log->info(${$result->statistical_summary});
$log->info(${$result->analogical_set_summary()});
if($log->is_debug){
$log->debug(${ $result->gang_summary(1) });
}elsif($log->is_info){
$log->info(${ $result->gang_summary(0) })
}
return;
}
# create the training set for this iteration, calling training_item_hook and
# updating excluded_items along the way
sub _make_training_set {
my ($self, $test_item, $iteration) = @_;
my $training_set;
# $self->_set_excluded_items([]);
my @excluded_items;
# Cap the amount of considered data if specified
my $max = defined $self->max_training_items ?
int($self->max_training_items) :
$self->training_set->size;
# use the original DataSet object if there are no settings
# that would trim items from it
if(!$self->training_item_hook &&
($self->probability == 1) &&
$max >= $self->training_set->size){
$training_set = $self->training_set;
}else{
# otherwise, make a new set with just the selected
# items
$training_set = Algorithm::AM::DataSet->new(
cardinality => $self->training_set->cardinality);
# don't try to add more items than we have!
my $num_items = ($max > $self->training_set->size) ?
$self->training_set->size :
$max;
for my $data_index ( 0 .. $num_items - 1 ) {
my $training_item =
$self->training_set->get_item($data_index);
# skip this data item if the training_item_hook returns false
if($self->training_item_hook &&
!$self->training_item_hook->($self,
$test_item, $iteration, $training_item)
){
push @excluded_items, $training_item;
next;
}
# skip this data item with probability $self->{probability}
if($self->probability != 1 &&
rand() > $self->probability){
push @excluded_items, $training_item;
next;
}
$training_set->add_item($training_item);
}
}
# $self->_set_excluded_items(\@excluded_items);
return ($training_set, \@excluded_items);
}
sub _set_test_set {
my ($self, $test_set) = @_;
$self->{test_set} = $test_set;
return;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Algorithm::AM::Batch - Classify items in batch mode
=head1 VERSION
version 3.13
( run in 0.520 second using v1.01-cache-2.11-cpan-d7f47b0818f )