Kmeans 聚类算法评估足球比赛

admin 欧洲杯直播 2024-02-11 48 0

  1.1 内容介绍

  K-means 算法采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means 算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标最小。算法采用误差平方和准则函数作为聚类准则函数。本节课首先讲解 Kmeans 算法思想,然后再用 Kmeans 分析足球赛事。

1.2 实验知识点

Scala 基础编程Spark Mlib 的 Kmeans 算法应用

1.3 实验环境

Ubuntu14.04Spark1.6.1Xfce终端

1.4 适合人群

  该项目难度一般,属于中等偏下难度,该项目适合有一定的 Spark 基础,对 MLib 有一定的了解,并热爱机器学习。

2.1 问题引入

  K-Means 算法主要解决的问题如下图所示。图中有一些散乱的点,用肉眼隐约可以看到大致有三个点集。但是我们怎么通过计算机程序找出这几个点群来呢?于是就出现了我们的 K-Means 算法(Wikipedia链接)。

  

  我们希望根据这些不同的点的分布,分为几个簇,把这些点就近划分到不同的簇,这些簇就是接下来我们说的 K 值,下图是我用圆圈标上了这些点可能属于的簇集,更醒目一些,当然这里K值取值不是唯一的如图:

  

2.2 算法思想

  通过不断的迭代来寻找 k 值,形成一种划分方式,使得用这k个类簇的均值来代表相应各类样本时所得的总体误差最小。同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。k-means 算法的基础是最小误差平方和准则,

  其函数是:

  

  上式中中,μc(i) 表示第i个聚类的均值。划分到各类簇内的样本越相似,其与该类均值间的误差平方越小,然后对所有类计算所得到的误差平方再次累加求和,即我们希望 J 值越小越好。

2.3 算法实现步骤

  k-means 算法是将样本聚类成 k 个簇中心,这里的 k 值是我们给定的,也就是我们希望把数据分成几个类别,具体算法描述如下:

  1) 为需要聚类的数据,随机选取 k 个聚类质心点

  2) 求每个点到聚类质心点的距离,计算其应该属于的类,迭代直到收敛于某个值 {

  对于每一个样例 i,:

  

  对于每一个类 j,重新计算该类的质心,从而确定新的簇心,一直迭代到某个值或达到要求:

  

3.1 进入开发环境

  进入到实验环境,双击桌面上的 Xfce,效果如下图

  

3.2 数据集介绍

  实验中数据参考根据张洋的算法杂货铺,并做适当的修改。

  根据图片可以得知这 15 支球队在 2006 年~ 2010 年的比赛情况,其中包括两次世界杯和一次亚洲杯。图片中的数据做了如下预处理:对于亚洲杯,前四名取其排名,十六强赋予 9,八强赋予 5,预选赛没出现的赋予 17。对于世界杯,进入决赛圈则取其最终排名,没有进入决赛圈的,打入预选赛十强赛赋予 40,预选赛小组未出线的赋予 50。这样做方便我们接下来使用数据。

  根据图片中的数据,我们可以把图片上的数据存储为 data.txt

  使用 命令创建

  

  添加如下内容,字段之间用空格分隔,并保存。

  使用命令显示内容。

  

3.3 启动 spark shell

  请在终端中输入如下代码:

  

  进入到 Spark 的 REPL 环境,相当于就是 Spark 的 Console。

3.4 导入数据并转换数据

  下面我们就进入到实验的关键位置,进行数据的导入。

3.4.1 导入数据

  拓展:Spark textFile 进行数据的导入,将外部数据导入到 Spark 中来,并将其转换成 RDD。

  键入如下命令:

  

  从图中我们可以看到我们引入了 /home/shiyanlou 下面的 data.txt 文件。在最后我们也了解到了当前的数据格式为 RDD[ String ] 类型的数据。

  现在我们可以看看当前 dataset 的数据样式。我们查看 dataset 的前十五行数据。

  拓展:这里使用到 RDD Action 操作,take(num)函数,take 的作用就是获取 RDD 中下标 0 到 num-1 的元素。foreach 遍历,并打印

  键入命令:

  

3.4.2 使用 命令导入依赖:

  

  然后我们将这些数据以空格分割开,拆分数据,将其转换 Vector 格式。

  

  由于需要多次使用该数据,用进行缓存,用查看数据。大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  结果如下图:

  

  划分子集,及迭代次数,这里选择 3 次,迭代次数根据机器状况决定,这里选择 100 次。

  

  分别打印这三个子集的质心大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  

3.4.3 打印数据及对应的子集大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!

  

  由质心,数据及对应的子集,知道 3 个子集的索引分别是 0、1、2,如果对数据排序, 应该是2、0、1。显然在子集[ 2 ]中有 2 个国家,分别是沙特,伊朗,这两个国家足球水平较好点,接着在子集[ 0 ]中也有两个国家,分别为韩国,日本,这两个国家足球水平一般,最后在在子集[ 1 ]剩下 8 个国家,其中包含中国[ 50, 50, 9 ],说明中国足球有点差,不太理想,需要加油,至此实验就结束啦。

  3.5 算法总结

  K-Means 算法必须先确定K值,K 值的选定是非常难以估计的,在一定程度上影响结果。而 K-Means++ 算法给出了解决这个问题的方案,有兴趣的可以看一下。

  本节课主要讲解了 K-Means,并基于算法进行一个简单案例讲解。

http://coolshell.cn/articles/7779.htmlhttps://en.wikipedia.org/wiki/K-means_clustering

Kmeans 聚类算法评估足球比赛

Kmeans 聚类算法评估足球比赛

评论