Algorithm-AdaBoost

 view release on metacpan or  search on metacpan

lib/Algorithm/AdaBoost/Classifier.pm  view on Meta::CPAN

package Algorithm::AdaBoost::Classifier;

use 5.014;
use overload '&{}' => \&as_closure;
use List::Util;
use Scalar::Util;
use Smart::Args;

sub new {
  args
    my $class => 'ClassName',
    my $weak_classifiers => 'ArrayRef[HashRef]';
  bless +{
    weak_classifiers => $weak_classifiers,
  } => $class;
}

sub as_closure {
  args my $self;
  return sub { $self->classify(@_) };
}

sub classify {
  args_pos
    my $self,
    my $feature => 'Any';
  List::Util::sum(
    map {
      $_->{weight} * $_->{classifier}->($feature);
    } @{ $self->{weak_classifiers} }
  );
}

1;
__END__

=head1 NAME

Algorithm::AdaBoost::Classifier

=head1 DESCRIPTION

This class should be instanciated via C<< Algorithm::AdaBoost->train >>.

=head1 METHODS

=head2 as_closure

Returns a CodeRef which delegates given arguments to C<classify>.

Altough you can use the object itself like a CodeRef because C<&{}> operator is overloaded with this method, it constructs a closure for each call.
So if you classify many inputs, you should hold a closure explicitly or use C<classify> directly.

=head2 classify

Executes binary classification. Takes 1 argument as a feature and return a real number. If the number is positive, given feature is considered to belong to one class. Similary, If the number is negative, given feature is considered to belong to anoth...

=head1 AUTHOR

Koichi SATOH E<lt>sekia@cpan.orgE<gt>

=cut



( run in 2.032 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )