API - Full example
include_once __DIR__ . '/../src/Impulse/Recommender/Dataset.php';
include_once __DIR__ . '/../src/Impulse/Recommender/LearningModel.php';
include_once __DIR__ . '/../src/Impulse/Recommender/Trainer.php';
$dataset = new Impulse\Recommender\Dataset();
$dataset->addItem(Impulse\Recommender\Dataset\Item::create('The Dark Knight'));
$dataset->addItem(Impulse\Recommender\Dataset\Item::create('Guardians of the Galaxy'));
$dataset->addItem(Impulse\Recommender\Dataset\Item::create('Logan'));
$dataset->addItem(Impulse\Recommender\Dataset\Item::create('Forrest Gump'));
$dataset->addItem(Impulse\Recommender\Dataset\Item::create('The Kid'));
$dataset->addCategory(Impulse\Recommender\Dataset\Category::create('Anna'));
$dataset->addCategory(Impulse\Recommender\Dataset\Category::create('Barbara'));
$dataset->addCategory(Impulse\Recommender\Dataset\Category::create('Charlie'));
$dataset->addCategory(Impulse\Recommender\Dataset\Category::create('Dave'));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Dark Knight', 'Anna', 0));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Dark Knight', 'Barbara', 0));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Dark Knight', 'Charlie', 5));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Dark Knight', 'Dave', 5));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Guardians of the Galaxy', 'Anna', 0));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Guardians of the Galaxy', 'Barbara', NULL));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Guardians of the Galaxy', 'Charlie', NULL));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Guardians of the Galaxy', 'Dave', 5));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Logan', 'Anna', NULL));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Logan', 'Barbara', 0));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Logan', 'Charlie', 4));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Logan', 'Dave', NULL));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Forrest Gump', 'Anna', 4));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Forrest Gump', 'Barbara', 5));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Forrest Gump', 'Charlie', 0));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('Forrest Gump', 'Dave', 0));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Kid', 'Anna', 5));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Kid', 'Barbara', 5));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Kid', 'Charlie', 0));
$dataset->addRating(Impulse\Recommender\Dataset\Rating::create('The Kid', 'Dave', 0));
$model = new Impulse\Recommender\LearningModel($dataset, [
'numFeatures' => 2
]);
$trainer = new Impulse\Recommender\Trainer($model, [
'learningRate' => 0.01,
'iterations' => 20000,
'verbose' => TRUE,
'verboseStep' => 1000
]);
$trainer->train();
echo "Prediction for 'Guardians of the Galaxy' for user 'Barbara': {$model->predict('Guardians of the Galaxy', 'Barbara')}\n";
echo "Prediction for 'Guardians of the Galaxy' for user 'Charlie': {$model->predict('Guardians of the Galaxy', 'Charlie')}\n";
echo "Prediction for 'Logan' for user 'Anna': {$model->predict('Logan', 'Anna')}\n";
echo "Prediction for 'Logan' for user 'Dave': {$model->predict('Logan', 'Dave')}\n";
echo "Prediction for 'Logan' for user with has not rated any movie: {$model->predict('Logan')}\n";
echo "Related movies dump:\n";
var_dump($model->findRelated('The Dark Knight', [
'limit' => 5
]));
Which may produce output:
Starting train with 20000 steps.
Step 0 with error 45.480538085596
Step 1000 with error 0.14185749105855
Step 2000 with error 0.00012367547481656
Step 3000 with error 3.619659641736E-6
Step 4000 with error 1.2231304078042E-7
Step 5000 with error 5.7888427762046E-9
Step 6000 with error 4.3159398580704E-10
Step 7000 with error 4.2963851024733E-11
Step 8000 with error 4.7458579962238E-12
Step 9000 with error 5.3950928017295E-13
Step 10000 with error 6.1779842297497E-14
Step 11000 with error 7.0872758334659E-15
Step 12000 with error 8.1340228680908E-16
Step 13000 with error 9.3363924793255E-17
Step 14000 with error 1.0716785358187E-17
Step 15000 with error 1.2301363738974E-18
Step 16000 with error 1.4120237226256E-19
Step 17000 with error 1.6208264249521E-20
Step 18000 with error 1.8605120483173E-21
Step 19000 with error 2.1359434707995E-22
Training ended with error 2.4586853842564E-23 after 20000 steps.
Prediction for 'Guardians of the Galaxy' for user 'Barbara': 1.3472778448431E-11
Prediction for 'Guardians of the Galaxy' for user 'Charlie': 4.9999999999974
Prediction for 'Logan' for user 'Anna': 1.3994139180795E-11
Prediction for 'Logan' for user 'Dave': 3.9999999999967
Prediction for 'Logan' for user with has not rated any movie: 2
Related movies dump:
array(4) {
[0]=>
array(2) {
["similarity"]=>
float(1.1086798146209E-11)
["model"]=>
array(2) {
["_id"]=>
string(23) "Guardians of the Galaxy"
["data"]=>
NULL
}
}
[1]=>
array(2) {
["similarity"]=>
float(0.17881301819823)
["model"]=>
array(2) {
["_id"]=>
string(5) "Logan"
["data"]=>
NULL
}
}
[2]=>
array(2) {
["similarity"]=>
float(0.92344428953759)
["model"]=>
array(2) {
["_id"]=>
string(12) "Forrest Gump"
["data"]=>
NULL
}
}
[3]=>
array(2) {
["similarity"]=>
float(1.7881301818354)
["model"]=>
array(2) {
["_id"]=>
string(7) "The Kid"
["data"]=>
NULL
}
}
}
Check examples/1_train_and_predict.php for details.