NAME

Algorithm::SlopeOne - Slope One collaborative filtering for rated resources

VERSION

version 0.004

SYNOPSIS

#!/usr/bin/env perl
use common::sense;
use Algorithm::SlopeOne;
use Data::Printer;

my $s = Algorithm::SlopeOne->new;
$s->add([
    {
        squid       => 1.0,
        cuttlefish  => 0.5,
        octopus     => 0.2,
    }, {
        squid       => 1.0,
        octopus     => 0.5,
        nautilus    => 0.2,
    }, {
        squid       => 0.2,
        octopus     => 1.0,
        cuttlefish  => 0.4,
        nautilus    => 0.4,
    }, {
        cuttlefish  => 0.9,
        octopus     => 0.4,
        nautilus    => 0.5,
    },
]);
p $s->predict({ squid => 0.4 });

# Output:
# \ {
#     cuttlefish   0.25,
#     nautilus     0.1,
#     octopus      0.233333333333333
# }

DESCRIPTION

Perl implementation of the Weighted Slope One rating-based collaborative filtering scheme.

ATTRIBUTES

diffs

Differential ratings matrix.

freqs

Ratings count matrix.

METHODS

clear

Reset the instance.

add($userprefs)

Update matrices with user preference data, accepts a HashRef or an ArrayRef of HashRefs:

$s->predict({ StarWars => 5, LOTR => 5, StarTrek => 3, Prometheus => 1 });
$s->predict({ StarWars => 3, StarTrek => 5, Prometheus => 4 });
$s->predict([
    { IronMan => 4, Avengers => 5, XMen => 3 },
    { XMen => 5, DarkKnight => 5, SpiderMan => 3 },
]);

predict($userprefs)

Recommend new items given known item ratings.

$s->predict({ StarWars => 5, LOTR => 5, Prometheus => 1 });

TODO

Implement Non-Weighted and Bi-Polar Slope One schemes.

REFERENCES

AUTHOR

Stanislaw Pusep <stas@sysd.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Stanislaw Pusep.

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