Inheritance: implements Set
 public function testComputeSimilarity2()
 {
     $instance = new KNNModelBuilder(null, new CosineSimilarity());
     $source = new ObjectSet(Rating::class);
     $destination = new ObjectSet(Rating::class);
     $node1 = new FakeNode(1);
     $node2 = new FakeNode(2);
     $node3 = new FakeNode(3);
     $node4 = new FakeNode(4);
     $node5 = new FakeNode(5);
     $source->add(new Rating(1, $node1->identity()));
     $source->add(new Rating(3, $node4->identity()));
     $destination->add(new Rating(1, $node2->identity()));
     $destination->add(new Rating(2, $node4->identity()));
     $destination->add(new Rating(5, $node5->identity()));
     $similarity = $instance->computeSimilarity($source, $destination);
     $this->assertTrue($similarity >= 0.34641016 && $similarity <= 0.346410161514);
 }
 public function createVectors(ObjectSet $tfSource, ObjectSet $tfDestination)
 {
     $ratings = [];
     foreach ($tfSource->getAll() as $source) {
         /** @var \GraphAware\Reco4PHP\Algorithms\Model\Rating $source */
         $ratings[$source->getId()][0] = $source->getRating();
     }
     foreach ($tfDestination->getAll() as $dest) {
         /** @var \GraphAware\Reco4PHP\Algorithms\Model\Rating $dest */
         $ratings[$dest->getId()][1] = $dest->getRating();
     }
     ksort($ratings);
     $xVector = [];
     $yVector = [];
     foreach ($ratings as $k => $rating) {
         $xVector[] = array_key_exists(0, $ratings[$k]) ? $ratings[$k][0] : 0;
         $yVector[] = array_key_exists(1, $ratings[$k]) ? $ratings[$k][1] : 0;
     }
     return array($xVector, $yVector);
 }
Example #3
0
 /**
  * @param \GraphAware\Common\Type\NodeInterface $node
  */
 public function add(NodeInterface $node)
 {
     if (parent::valid($node) && !$this->contains($node)) {
         $this->elements[$node->identity()] = $node;
     }
 }
$stopwatch->start("e");
$result = $driver->run($qA);
$e = $stopwatch->stop("e");
echo $e->getDuration() . PHP_EOL;
$stopwatch->start("simil");
$pairs = [];
$crs = array_chunk($result->records(), 100);
foreach ($result->records() as $record) {
    $source = new ObjectSet(Rating::class);
    $m = $record->value("m");
    foreach ($record->value("ratings") as $rating) {
        $source->add(new Rating($rating['rating'], $rating['user']));
    }
    foreach ($crs as $cr) {
        foreach ($cr as $record2) {
            $m2 = $record2->value("m");
            $k = $m + $m2;
            if (!array_key_exists($k, $pairs) && $record2->value("m") !== $record->value("m")) {
                $destination = new ObjectSet(Rating::class);
                foreach ($record2->value("ratings") as $rating2) {
                    $destination->add(new Rating($rating2['rating'], $rating2['user']));
                }
                $simil = $knn->computeSimilarity($source, $destination);
                $pairs[$k] = ['source' => $record->value("m"), 'desc' => $record2->value("m"), 'similarity' => $simil];
                //echo $simil . PHP_EOL;
            }
        }
    }
}
$e2 = $stopwatch->stop("simil");
echo $e2->getDuration() . PHP_EOL;