phpjuice / opencf
PHP implementation of the (Weighted Slopeone,Cosine, Weighted Cosine) rating-based collaborative filtering schemes.
Installs: 3 010
Dependents: 0
Suggesters: 0
Security: 0
Stars: 95
Watchers: 3
Forks: 7
Open Issues: 2
Requires
- php: ^7.4|^8.0|^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.34
- pestphp/pest: ^1.23
- phpstan/phpstan: ^1.10
README
PHP implementation of the (Weighted Slopeone,Cosine, Weighted Cosine) rating-based collaborative filtering schemes.
To learn all about it, head over to the extensive documentation.
Installation
OpenCF Package requires PHP 7.4
or higher.
INFO: If you are using an older version of php this package will not function correctly.
The supported way of installing OpenCF
package is via Composer.
composer require phpjuice/opencf
Usage
OpenCF Package is designed to be very simple and straightforward to use. All you have to do is:
- Load a training set (dataset)
- Predict future ratings using a recommender. (Weighted Slopeone,Cosine, Weighted Cosine)
Create Recommender Service
The OpenCF
recommender service is created by direct instantiation:
use OpenCF\RecommenderService; // Create an instance $recommenderService = new RecommenderService($dataset);
Adding dataset
Adding a dataset to the recommender can be done using the constructor or can be easily done by providing an array of
users ratings via the setDataset()
method:
$dataset = [ "squid" => [ "user1" => 1, "user2" => 1, "user3" => 0.2, ], "cuttlefish" => [ "user1" => 0.5, "user3" => 0.4, "user4" => 0.9, ], "octopus" => [ "user1" => 0.2, "user2" => 0.5, "user3" => 1, "user4" => 0.4, ], "nautilus" => [ "user2" => 0.2, "user3" => 0.4, "user4" => 0.5, ], ]; $recommenderService->setDataset($dataset);
Getting Predictions
All you have to do to predict ratings for a new user is to retrieve an engine from the recommender service and & run
the predict()
method.
// Get a recommender $recommender = $recommenderService->cosine(); // Cosine recommender // OR $recommender = $recommenderService->weightedCosine(); // WeightedCosine recommender // OR $recommender = $recommenderService->weightedSlopeone(); // WeightedSlopeone recommender // Predict future ratings $results = $recommender->predict([ "squid" => 0.4 ]);
This should produce the following results when using WeightedSlopeone
recommender
[ "cuttlefish" => 0.25, "octopus" => 0.23, "nautilus" => 0.1 ];
Running the tests
you can easily run tests using composer
composer test
Built With
- PHP - The programing language used
- Composer - Dependency Management
- Pest - An elegant PHP Testing Framework
Changelog
Please see the changelog for more information on what has changed recently.
Contributing
Please see CONTRIBUTING.md for details and a todo list.
Security
If you discover any security related issues, please email author instead of using the issue tracker.
Credits
- Daniel Lemire
- SlopeOne Predictors for Online Rating-Based Collaborative Filtering
- Distance Weighted Cosine Similarity
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
License
license. Please see the Licence for more information.