📄 decisiontree.pm
字号:
package AI::Categorizer::Learner::DecisionTree;$VERSION = '0.01';use strict;use AI::DecisionTree;use AI::Categorizer::Learner::Boolean;use base qw(AI::Categorizer::Learner::Boolean);sub create_model { my $self = shift; $self->SUPER::create_model; $self->{model}{first_tree}->do_purge; delete $self->{model}{first_tree};}sub create_boolean_model { my ($self, $positives, $negatives, $cat) = @_; my $t = new AI::DecisionTree(noise_mode => 'pick_best', verbose => $self->verbose); my %results; for ($positives, $negatives) { foreach my $doc (@$_) { $results{$doc->name} = $_ eq $positives ? 1 : 0; } } if ($self->{model}{first_tree}) { $t->copy_instances(from => $self->{model}{first_tree}); $t->set_results(\%results); } else { for ($positives, $negatives) { foreach my $doc (@$_) { $t->add_instance( attributes => $doc->features->as_boolean_hash, result => $results{$doc->name}, name => $doc->name, ); } } $t->purge(0); $self->{model}{first_tree} = $t; } print STDERR "\nBuilding tree for category '", $cat->name, "'" if $self->verbose; $t->train; return $t;}sub get_scores { my ($self, $doc) = @_; local $self->{current_doc} = $doc->features->as_boolean_hash; return $self->SUPER::get_scores($doc);}sub get_boolean_score { my ($self, $doc, $t) = @_; return $t->get_result( attributes => $self->{current_doc} ) || 0;}1;__END__=head1 NAMEAI::Categorizer::Learner::DecisionTree - Decision Tree Learner=head1 SYNOPSIS use AI::Categorizer::Learner::DecisionTree; # Here $k is an AI::Categorizer::KnowledgeSet object my $l = new AI::Categorizer::Learner::DecisionTree(...parameters...); $l->train(knowledge_set => $k); $l->save_state('filename'); ... time passes ... $l = AI::Categorizer::Learner->restore_state('filename'); while (my $document = ... ) { # An AI::Categorizer::Document object my $hypothesis = $l->categorize($document); print "Best assigned category: ", $hypothesis->best_category, "\n"; }=head1 DESCRIPTIONThis class implements a Decision Tree machine learner, usingC<AI::DecisionTree> to do the internal work.=head1 METHODSThis class inherits from the C<AI::Categorizer::Learner> class, so allof its methods are available unless explicitly mentioned here.=head2 new()Creates a new DecisionTree Learner and returns it.=head2 train(knowledge_set => $k)Trains the categorizer. This prepares it for later use incategorizing documents. The C<knowledge_set> parameter must providean object of the class C<AI::Categorizer::KnowledgeSet> (or a subclassthereof), populated with lots of documents and categories. SeeL<AI::Categorizer::KnowledgeSet> for the details of how to create suchan object.=head2 categorize($document)Returns an C<AI::Categorizer::Hypothesis> object representing thecategorizer's "best guess" about which categories the given documentshould be assigned to. See L<AI::Categorizer::Hypothesis> for moredetails on how to use this object.=head2 save_state($path)Saves the categorizer for later use. This method is inherited fromC<AI::Categorizer::Storable>.=head1 AUTHORKen Williams, ken@mathforum.org=head1 COPYRIGHTCopyright 2000-2003 Ken Williams. All rights reserved.This library is free software; you can redistribute it and/ormodify it under the same terms as Perl itself.=head1 SEE ALSOAI::Categorizer(3)=cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -