The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

NAME

Algorithm::AdaGrad - AdaGrad learning algorithm.

SYNOPSIS

my $ag = Algorithm::AdaGrad->new(0.1);
$ag->update([
{ "label" => 1, "features" => { "R" => 1.0, "G" => 0.0, "B" => 0.0 } },
]);
$ag->update([
{ "label" => -1, "features" => { "R" => 0.0, "G" => 1.0, "B" => 0.0 } },
{ "label" => -1, "features" => { "R" => 0, "G" => 0, "B" => 1 } },
{ "label" => -1, "features" => { "R" => 0.0, "G" => 1.0, "B" => 1.0 } },
{ "label" => 1, "features" => { "R" => 1.0, "G" => 0.0, "B" => 1.0 } },
{ "label" => 1, "features" => { "R" => 1.0, "G" => 1.0, "B" => 0.0 } }
]);
my $result = $ag->classify({ "R" => 1.0, "G" => 1.0, "B" => 0.0 });

DESCRIPTION

Algorithm::AdaGrad is implementation of AdaGrad(Adaptive Gradient) online learning algorithm. This module can be use for binary classification.

METHODS

new($eta)

Constructor. $eta is learning ratio.

update($learning_data)

Executes learning.

$learning_data is ArrayRef like bellow.

$ag->update([
{ "label" => -1, "features" => { "R" => 0.0, "G" => 1.0, "B" => 0.0 } },
{ "label" => -1, "features" => { "R" => 0, "G" => 0, "B" => 1 } },
{ "label" => -1, "features" => { "R" => 0.0, "G" => 1.0, "B" => 1.0 } },
{ "label" => 1, "features" => { "R" => 1.0, "G" => 0.0, "B" => 1.0 } },
{ "label" => 1, "features" => { "R" => 1.0, "G" => 1.0, "B" => 0.0 } }
]);

features is set of feature-string and value(real number) pair. label is a expected output label (+1 or -1).

classify($features)

Executes binary classification. Returns 1 or -1.

$features is HashRef like bellow.

my $result = $ag->classify({ "R" => 1.0, "G" => 1.0, "B" => 0.0 });

save($filename)

This method dumps the internal data of an object to a file.

load($filename)

This method restores the internal data of object from dumped file.

SEE ALSO

John Duchi, Elad Hazan, Yoram Singer. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization http://www.magicbroom.info/Papers/DuchiHaSi10.pdf

LICENSE

Copyright (C) Hideaki Ohno.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Hideaki Ohno <hide.o.j55@gmail.com>