1<?php
2
3declare(strict_types=1);
4
5namespace Phpml\Math\Kernel;
6
7use Phpml\Math\Kernel;
8use Phpml\Math\Product;
9
10class RBF implements Kernel
11{
12    /**
13     * @var float
14     */
15    private $gamma;
16
17    public function __construct(float $gamma)
18    {
19        $this->gamma = $gamma;
20    }
21
22    /**
23     * @param array $a
24     * @param array $b
25     */
26    public function compute($a, $b): float
27    {
28        $score = 2 * Product::scalar($a, $b);
29        $squares = Product::scalar($a, $a) + Product::scalar($b, $b);
30
31        return exp(-$this->gamma * ($squares - $score));
32    }
33}
34