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
Slope One - Wikipedia article
Slope One Predictors for Online Rating-Based Collaborative Filtering - original paper
Collaborative filtering made easy - Python implementation by Bryan O'Sullivan (primary reference, test code)
github.com/ashleyw/Slope-One - Ruby port of the above by Ashley Williams (used to borrow test code)
Programming Collective Intelligence book by Toby Segaran
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.