此算法的主要作用:屏幕上很多的點(diǎn),把相鄰的點(diǎn)聚到離他最近的點(diǎn)。
k-means algorithm算法是一個(gè)聚類算法,把n個(gè)對(duì)象根據(jù)他們的屬性分為k個(gè)分割,k < n。它與處理混合正態(tài)分布的最大期望算法很相似,因?yàn)樗麄兌荚噲D找到數(shù)據(jù)中自然聚類的中心。
php實(shí)現(xiàn)算法代碼如下:
html' target='_blank'>class Cluster { public $points; public $avgPoint; function calculateAverage($maxX, $maxY) { if (count($this->points)==0) { $this->avgPoint->x = rand(0, $maxX); $this->avgPoint->y = rand(0,$maxY); //we didn't get any clues at all :( lets just randomize and hope for better... return; } foreach($this->points as $p) { $xsum += $p->x; $ysum += $p->y; } $count = count($this->points); $this->avgPoint->x = $xsum / $count; $this->avgPoint->y = $ysum / $count; } } class Point { public $x; public $y; function getDistance($p) { $x1 = $this->x - $p->x; $y1 = $this->y - $p->y; return sqrt($x1*$x1 + $y1*$y1); } } function distributeOverClusters($k, $arr) { foreach($arr as $p) { if ($p->x > $maxX) $maxX = $p->x; if ($p->y > $maxY) $maxY = $p->y; } $clusters = array(); for($i = 0; $i < $k; $i++) { $clusters[] = new Cluster(); $tmpP = new Point(); $tmpP->x=rand(0,$maxX); $tmpP->y=rand(0,$maxY); $clusters[$i]->avgPoint = $tmpP; } #deploy points to closest center. #recalculate centers for ($a = 0; $a < 200; $a++) # run it 200 times { foreach($clusters as $cluster) $cluster->points = array(); //reinitialize foreach($arr as $pnt) { $bestcluster=$clusters[0]; $bestdist = $clusters[0]->avgPoint->getDistance($pnt); foreach($clusters as $cluster) { if ($cluster->avgPoint->getDistance($pnt) < $bestdist) { $bestcluster = $cluster; $bestdist = $cluster->avgPoint->getDistance($pnt); } } $bestcluster->points[] = $pnt;//add the point to the best cluster. } //recalculate the centers. foreach($clusters as $cluster) $cluster->calculateAverage($maxX, $maxY); } return $clusters; } $p = new Point(); $p->x = 2; $p->y = 2; $p2 = new Point(); $p2->x = 3; $p2->y = 2; $p3 = new Point(); $p3->x = 8; $p3->y = 2; $arr[] = $p; $arr[] = $p2; $arr[] = $p3; var_dump(distributeOverClusters(2, $arr));
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選