此算法的主要作用:屏幕上很多的点,把相邻的点聚到离他最近的点。
k-means algorithm算法是一个聚类算法,把n个对象根据他们的属性分为k个分割,k < n。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。
php实现算法代码如下:
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));
参考地址:http://en.wikipedia.org/wiki/K-means_clustering
分享到:
相关推荐
基于K-means聚类算法的图像分割 算法的基本原理: 基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...
主要介绍了详解Java实现的k-means聚类算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
基于k-means聚类算法的研究,黄韬,刘胜辉,本文首先分析研究聚类分析方法,对多种聚类分析算法进行分析比较,讨论各自的优点和不足,同时针对原k-means算法的聚类结果受随机��
基于 K-means 聚类算法的图像区域分割,首先从数据样本种选取K个点作为初始聚类中心,其次计算各个样本到聚类的距离,把样本归到离它最近的那个聚类中心所在的累,计算新形成的每个聚类的数据对象的平均值来得到新的...
实验五 K-Means聚类算法.ipynb
PPT用于初步理解K-means算法,且基于K-means算法衍生出了三类算法:K-medoids,k-means++,FCM。该PPT的传输来自导师的资源分享,不涉及商用,用于大家对K-means算法的理解。如有侵权,本人将撤销资源上传。以上。
用动画效果 帮助新手理解K-means聚类,有数据,有动画
主要介绍了Python用K-means聚类算法进行客户分群的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
k - means聚类分析算法Python实现,并以鸢尾花数据集为例进行聚类演示
K-MEANS聚类算法的实现K-MEANS聚类算法的实现
K-means算法是一种采用距离作为相似性评价指标的聚类算法,其快速简洁的特点在异常检测场景中有一定的应用价值。但是,传统的K-means聚类算法在选取初始中心和度量相似性上有一定缺陷。针对传统的K-means算法中存在的...
头歌k-means聚类算法 K-Means聚类算法java实现.pdf K-Means聚类算法java实现.pdf K-Means聚类算法java实现.pdf K-Means聚类算法java实现.pdf K-Means聚类算法java实现.pdf K-Means聚类算法java实现.pdf K-Means聚类...
K-means聚类算法的性能依赖于距离度量的选择,k-means算法将欧几里德距离作为最常用的距离度量方法。欧氏距离认为所有属性在聚类中作用是相同的,但是这种距离度量方法并不能准确反映样本间的相异性。针对这种不足,...
上述代码是利用python内置的k-means聚类算法对鸢尾花数据的聚类效果展示,注意在运行该代码时需要采用pip或者其他方式为自己的python安装sklearn以及iris扩展包,其中X = iris.data[:]表示我们采用了鸢尾花数据的四...
k-means实战,包括一个具体的例子。非常适合初级学习k-means聚类算法的人群
针对当前多区域物流中心选址需建立配送中心个数不定、位置、覆盖范围不明的问题,本文提出了一种改进的k-means聚类算法,以城市经济引力模型为基础,将城市运输距离与居民消费能力的指标相结合,重新定义对象之间...
将流形距离引入K-means聚类算法中,对于具有流形结构的数据集有很好的聚类效果,流形距离计算参数的设定充分考虑了全局和局部一致性。
K-means聚类算法的C++实现,包含分词器,可以进行多关键词的聚类
K-Means聚类算法研究综述_杨俊闯.pdf
提供了k-means多维数据的聚类分析matlab源代码代码