点云 K-Means聚类算法 (附c++代码)

一、K-Means算法

在诸多的聚类方法中,K-Means聚类方法是属于“基于原型的聚类”(也称为原型聚类)的方法,此类方法均是假设聚类结构能通过一组原型刻画,在现实聚类中极为常用。通常情况下,该类算法会先对原型进行初始化,然后再对原型进行迭代更新求解。采用不同的原型表示、不同的求解方式,也将会产生不同的算法。

K-Means算法作为一种经典的“原型聚类”算法,其原型选择的是“K个聚类中心”,迭代求解的方式是以相邻两次求解的“质心”(同一类所有的点的x,y,z坐标的平均值)变化程度而进行的,这也可能就是K-Means聚类名字的由来:K个聚类中心+质心(坐标平均值)。

二、K-Means算法步骤

过程其实相对简单:

1、初始化原型,也就是指定K值和K个聚类中心。这其中聚类中心的指定可以人为的输入、也可以随机选择或者其他方式都可以,不过尽量保证聚类中心之间的距离不要选的太近。 2、聚类。遍历所有数据点,计算每个数据点到这K个聚类中心的距离(我这里选择的是欧式距离,也可以选择马氏距离或者其他距离),将每个数据点分配给距离该点最近的聚类中心所属的类别,直到最后一个数据点。 3、更新聚类中心。也就是计算每一类的质心,并将本次计算出的聚类中心与上一次的聚类中心进行比较,如果所有的聚类中心都没有变化,则停止;如果有所变化,则将本次的聚类中心作为新的聚类中心,重复上述的2、3过程,直到所有的聚类中心都没有变化时停止该过程。

三、代码实现效果

代码如下: main.cpp:

猜你喜欢

转载自blog.csdn.net/a394467238/article/details/132585298