/** * @param array $samples * * @return array */ public function cluster(array $samples) { $space = new Space(count($samples[0])); foreach ($samples as $sample) { $space->addPoint($sample); } $clusters = []; foreach ($space->cluster($this->clustersNumber, $this->initialization) as $cluster) { $clusters[] = $cluster->getPoints(); } return $clusters; }
public function updateCentroid() { if (!($count = count($this->points))) { return; } $centroid = $this->space->newPoint(array_fill(0, $this->dimension, 0)); foreach ($this->points as $point) { for ($n = 0; $n < $this->dimension; ++$n) { $centroid->coordinates[$n] += $point->coordinates[$n]; } } for ($n = 0; $n < $this->dimension; ++$n) { $this->coordinates[$n] = $centroid->coordinates[$n] / $count; } }