本篇文章是使用excel实现kmeans算法

目录

一、kmeans原理

二、Excel实现过程

1、原数据(即数据样本)

2、确定划分的类数

3、确定初始中心

4、计算每个样本点到每个中心的距离

 5、对数据进行标注,根据距离最小值确定每个样本的类别

 6、新的中心点

7、重复流程 

 总结


一、kmeans原理

kmeans是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。

K-Means聚类算法中,一般需要度量样本之间的距离、样本与簇之间的距离以及簇与簇之间的距离。

算法过程:

1)从N个样本数据中随机选取K个对象作为初始的聚类中心;

2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中;

3)所有对象分配完成后,重新计算K个聚类的中心;

4)与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转2),否则转5);

5)当质心不发生变化时停止并输出聚类结果。

二、Excel实现过程

1、原数据(即数据样本)

 这是数据样本的样子,我只展示了部分数据。主要是使用Excel函数中randbetween(start, end),start是数据范围的最小值,end是数据范围的最大值。使用这个函数就可以生成数据样本。

然后我们绘制散点图观察图的大致分布情况,如下

2、确定划分的类数

这里我就想划分为3类,我就以划分三类类实现这个算法。

3、确定初始中心

这里我则是直接取开始的三个点作为初始中心

4、计算每个样本点到每个中心的距离

这里我主要使用和一些简单的excel 函数实现

第一类距离计算公式:SQRT((A2-$A$2)^2+(B2-$B$2)^2) 每个样本点减去第一类中心点,

                                        然后平方,最后开方得到距离。

第二类距离计算公式:SQRT((A2-$A$3)^2+(B2-$B$3)^2) 每个样本点减去第二类中心点,

                                        然后平方,最后开方的到距离

第二类距离计算公式:SQRT((A2-$A$4)^2+(B2-$B$4)^2) 每个样本点减去第三类中心点,

                                        然后平方,最后开方的到距离

计算部分结果如下:

 5、对数据进行标注,根据距离最小值确定每个样本的类别

使用了=IF(L2<M2,IF(L2<N2,"A","C"),IF(M2<N2,"B","C")) 公式对上图的每个距离进行判断,先判断L2<M2两个距离,如果为真则执行IF(L2<N2,"A","C"),将第一次判断最小值与剩下的值比较即可,这个判断如果为真,则最短距离是A,否则为C;如果为假则执行IF(M2<N2,"B","C"),将第一次判断最小值与剩下的值比较即可,这个判断如果为真,则最短距离是B,否则为C。

原理图如下:

 判断类别的部分结果如下:

 6、新的中心点

接着我们计算第一次分类后的中心点,将相同类别的数据求平均值得到新的中心点

公式:SUMIF($D$2:$D$51,"A",A2:A51)/COUNTIF($D$2:$D$51,"A")

现将相同的类别的数据条件求和除于统计该类的个数。其他类中心也是同理。

结果如下:

7、重复流程 

通过第一次计算流程,接着下面的流程就是重复上面的4、5、6,直到最后中心点数据与前一次中心点数据相同,则分类完成。

我的样本数据经过三次迭代就分类完成了,后面的迭代过程结果如下:

 

 

 

 进过三次的计算,就能实现类别的分类。

最后分类图如下:

 总结

excel实现kmeans算法只适合任意维度的计算,但是计算过程复杂,计算量大。

希望这篇文章能帮助到你,有错误和疑问可以评论区评论和纠正!感谢支持!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐