Phpml\Clustering\KMeans\Space::initializeKMPPClusters PHP Method

initializeKMPPClusters() protected method

protected initializeKMPPClusters ( integer $clustersNumber ) : array
$clustersNumber integer
return array
    protected function initializeKMPPClusters(int $clustersNumber)
    {
        $clusters = [];
        $this->rewind();
        $clusters[] = new Cluster($this, $this->current()->getCoordinates());
        $distances = new SplObjectStorage();
        for ($i = 1; $i < $clustersNumber; ++$i) {
            $sum = 0;
            foreach ($this as $point) {
                $distance = $point->getDistanceWith($point->getClosest($clusters));
                $sum += $distances[$point] = $distance;
            }
            $sum = rand(0, (int) $sum);
            foreach ($this as $point) {
                if (($sum -= $distances[$point]) > 0) {
                    continue;
                }
                $clusters[] = new Cluster($this, $point->getCoordinates());
                break;
            }
        }
        return $clusters;
    }