本篇文章是使用excel实现kmeans算法
目录
一、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算法只适合任意维度的计算,但是计算过程复杂,计算量大。
希望这篇文章能帮助到你,有错误和疑问可以评论区评论和纠正!感谢支持!