mirror of
https://github.com/Llewellynvdm/php-ml.git
synced 2024-11-26 06:46:45 +00:00
create euclidean distance function
This commit is contained in:
parent
f6a5611586
commit
ce1653a5a7
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Phpml\Classifier;
|
namespace Phpml\Classifier;
|
||||||
|
|
||||||
@ -9,7 +10,7 @@ interface Classifier
|
|||||||
* @param array $features
|
* @param array $features
|
||||||
* @param array $labels
|
* @param array $labels
|
||||||
*/
|
*/
|
||||||
public function train($features, $labels);
|
public function train(array $features, array $labels);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param mixed $feature
|
* @param mixed $feature
|
||||||
|
54
src/Phpml/Classifier/KNearestNeighbors.php
Normal file
54
src/Phpml/Classifier/KNearestNeighbors.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Phpml\Classifier;
|
||||||
|
|
||||||
|
class KNearestNeighbors implements Classifier
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
private $k;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $features;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $labels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $k
|
||||||
|
*/
|
||||||
|
public function __construct(int $k = 3)
|
||||||
|
{
|
||||||
|
$this->k = $k;
|
||||||
|
$this->features = [];
|
||||||
|
$this->labels = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $features
|
||||||
|
* @param array $labels
|
||||||
|
*/
|
||||||
|
public function train(array $features, array $labels)
|
||||||
|
{
|
||||||
|
$this->features = $features;
|
||||||
|
$this->labels = $labels;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $feature
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function predict($feature)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,10 +1,27 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Phpml\Classifier;
|
namespace Phpml\Classifier;
|
||||||
|
|
||||||
abstract class NaiveBayes implements Classifier
|
class NaiveBayes implements Classifier
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $features
|
||||||
|
* @param array $labels
|
||||||
|
*/
|
||||||
|
public function train(array $features, array $labels)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $feature
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function predict($feature)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Phpml\Classifier\NaiveBayes;
|
|
||||||
|
|
||||||
class GaussianNaiveBayes extends NaiveBayes
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $features
|
|
||||||
* @param array $labels
|
|
||||||
*/
|
|
||||||
public function train($features, $labels)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param mixed $feature
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function predict($feature)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
17
src/Phpml/Exception/InvalidArgumentException.php
Normal file
17
src/Phpml/Exception/InvalidArgumentException.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace Phpml\Exception;
|
||||||
|
|
||||||
|
class InvalidArgumentException extends \Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public static function parametersSizeNotMatch()
|
||||||
|
{
|
||||||
|
return new self('Size of parameters not match');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
36
src/Phpml/Metric/Distance.php
Normal file
36
src/Phpml/Metric/Distance.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace Phpml\Metric;
|
||||||
|
|
||||||
|
use Phpml\Exception\InvalidArgumentException;
|
||||||
|
|
||||||
|
class Distance
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $a
|
||||||
|
* @param array $b
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public static function euclidean(array $a, array $b): float
|
||||||
|
{
|
||||||
|
if(count($a) != count($b))
|
||||||
|
{
|
||||||
|
throw InvalidArgumentException::parametersSizeNotMatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
$distance = 0;
|
||||||
|
|
||||||
|
for($i=0; $i<count($a); $i++)
|
||||||
|
{
|
||||||
|
$distance += pow($a[$i] - $b[$i], 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sqrt($distance);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user