AI-MaxEntropy
view release on metacpan or search on metacpan
lib/AI/MaxEntropy/Model.pm view on Meta::CPAN
# preprocess if $x is hashref
$x = [
map {
my $attr = $_;
ref($x->{$attr}) eq 'ARRAY' ?
map { "$attr:$_" } @{$x->{$attr}} : "$_:$x->{$_}"
} keys %$x
] if ref($x) eq 'HASH';
# calculate score
my @x1 = map { $self->{x_bucket}->{$_} } @$x;
my $lambda_f = 0;
if (defined(my $y1 = $self->{y_bucket}->{$y})) {
for my $x1 (@x1) {
if (defined($x1)) {
my $lambda_i = $self->{f_map}->[$y1]->[$x1];
$lambda_f += $self->{lambda}->[$lambda_i]
if $lambda_i != -1;
}
}
}
return $lambda_f;
}
sub predict {
my $self = shift;
my $x = shift;
my @score = map { $self->score($x => $_) } @{$self->{y_list}};
my ($max_score, $max_y) = (undef, undef);
for my $y (0 .. $self->{y_num} - 1) {
($max_score, $max_y) = ($score[$y], $y) if not defined($max_y);
($max_score, $max_y) = ($score[$y], $y) if $score[$y] > $max_score;
}
return $self->{y_list}->[$max_y];
}
1;
__END__
=head1 NAME
AI::MaxEntropy::Model - Perl extension for using Maximum Entropy Models
=head1 SYNOPSIS
use AI::MaxEntropy::Model;
# learn a model by AI::MaxEntropy
require AI::MaxEntropy;
my $me = AI::MaxEntropy->new;
$me->see(['round', 'smooth', 'red'] => 'apple' => 2);
$me->see(['long', 'smooth', 'yellow'] => 'banana' => 3);
$me->see(['round', 'rough'] => 'orange' => 2);
my $model = $me->learn;
# make prediction on unseen data
# ask what a red round thing is most likely to be
my $y = $model->predict(['round', 'red']);
# the answer apple is expected
# print out scores of all possible labels
for ($model->all_labels) {
my $s = $model->score(['round', 'red'] => $_);
print "$_: $s\n";
}
# save the model to file
$model->save('model_file');
# load the model from file
$model->load('model_file');
=head1 DESCRIPTION
This module manipulates models learnt by L<AI::MaxEntropy>. For details
about Maximum Entropy learner, please refer to L<AI::MaxEntropy>.
=head1 FUNCTIONS
=head2 new
Create a new model object from a model file.
my $model = AI::MaxEntropy::Model->new('model_file');
=head2 predict
Get the most possible label for a unlabeled sample
...
$y = $model->predict(['round', 'red']);
=head2 score
Get scores for every possible label for a unlabeled sample
...
$s = $model->score(['round', 'red'] => 'apple');
=head2 save
Dumps the model to a file.
...
$model->save('model_file');
=head2 load
Loads the model from a file.
...
$model->load('model_file');
=head2 all_x
Returns a list of all x.
=head2 all_labels
Returns a list of all y (labels).
( run in 1.377 second using v1.01-cache-2.11-cpan-d8267643d1d )