机器学习实践:足球比赛聚类分析

1、实验描述

  • 本实验利用K-Means聚类分析算法对足球比赛结果进行分析,该算法通过Sprak Mllib库来调用,我们将学习K-Means算法的K值选取,聚类原理等内容,理解聚类算法在实际业务中的应用场景

  • 实验时长:45分钟

  • 主要步骤:

    • KMeans算法简介

    • Spark Mllib库简介

    • 数据准备

    • 代码编写

2、实验环境

  • 虚拟机数量:1

  • 系统版本:CentOS 7.5

  • Spark版本:spark-2.1.1-bin-hadoop2.7

3、相关技能

  • K-Means 算法

  • Spark Mllib

4、相关知识点

  • spark-shell

  • Scala编程

  • Spark Mllib

  • K-Means

5、实现效果

图 1

6、实验步骤

6.1K-Means算法:K-Means是非监督学习中的一种聚类算法,K 代表最终将样本数据聚合为 K 个类别。而「均值」代表在聚类的过程中,我们计算聚类中心点的特征向量时,需要采用求相邻样本点特征向量均值的方式进行

6.1.1聚类过程:

6.1.1.1第一步,确定聚类的个数(K),在特征空间上,随机初始化k个类别的中心。当然,k值的大小并不是随机选取的,在我们使用K-Means聚类时我们一般通过计算轮廓系数来确定k值的大小,我们计算数据集中所有点的轮廓系数,最终以平均值作为当前聚类的整体轮廓系数。整体轮廓系数介于 [-1,1] ,越趋近于 1 代表聚类的效果越好。

6.1.1.2依据上一步随机初始化的中心,将现有的样本按照与最近的中心点之间的距离进行归类。

6.1.1.3通过计算出新的中心点的位置,又接着迭代到上一步的计算,继续求解中心。

6.1.1.4依次迭代下去,直到中心点的变化非常小的时候,停止。就可以将全部样本聚类为k类

6.2Spark Mllib库简介:Spark提供了一个基于海量数据的ML库(MLlib),MLLib提供了常用机器学习算法的分布式实现。开发者只需要有Spark基础,且了解机器学习算法的原理,以及方法相关参数的含义,就可以通过调用相应的API来实现基于海量数据的ML过程,MLlib旨在简化ML的工作实践工作,并方便扩展到更大规模。MLlib由一些通用的学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等,同时还包括底层的优化原语和高层的管道API。本实验中我们将使用Spark MLlib库提供的K-Means聚类算法完成实验

6.3准备实验数据

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

图 2

6.3.2使用vim编辑’data.txt‘,添加如下内容,字段之间用空格分隔,并保存。

[zkpk@master ~]$ vim data.txt
50 50 9
28 9 4
17 15 3
25 40 5
28 40 2
50 50 1
50 40 9
50 40 9
40 40 5
50 50 9
50 50 5
50 50 9
40 40 9
40 32 17
50 50 9

6.3.3数据准备完毕,安装spark(这里我们只需要单机版的spark的环境即可),解压tgz下的spark安装包

[zkpk@master ~]$ cd tgz/spark
[zkpk@master spark]$ tar -zxvf spark-2.1.1-bin-hadoop-2.7 -C ~/

6.3.3.1打开spark shell终端

[zkpk@master spark]$ cd ~/spark-2.1.1-bin-hadoop2.7/
[zkpk@master spark-2.1.1-bin-hadoop2.7]$ bin/spark-shell

图 3

6.4导入数据集成为一个RDD对象data,我们用take获取rdd的前15行数据,循环输出看一下

scala>val data =sc.textFile("/home/zkpk/data.txt")
scala>data.take(15).foreach(println)

图 4

6.5用import导入Spark Mllib中的Vector和KMeans包,这里的Vector是用来将数据处理成特征向量的工具,KMeans是用来做聚类分析的算法包

scala>import org.apache.spark.mllib.linalg.Vectors
scala>import org.apache.spark.mllib.clustering.KMeans

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

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

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

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

6.7数据处理,训练模型,输出结果

6.7.1将数据以空格切分后,转换成Vector格式

scala>val datavector = data.map{ x => Vectors.dense(x.split(" ").map(_.toDouble))}

6.7.2在计算聚类中心是,需要多次迭代计算,对于迭代计算多次使用到的数据我们利用cache方法缓存到内存加快计算速度,用‘collect’查看数据

scala>datavector.cache()
scala>datavector.collect

图 5

6.7.3创建KMeans聚类模型,设置要聚类的子集个数和迭代次数,这里我们将聚类的个数设置为3类,迭代计算100次

scala>val model = KMeans.train(datavector,3,100)

6.7.4模型构建完成后,打印三个子集的质心

scala>model.clusterCenters.foreach { println }

图 6

6.7.5打印数据及对应的子集

scala>datavector.foreach {x =>println(x + " belongs to subset: " + model.predict(x))}

图 7

6.8由聚类中心,数据及对应的分类,知道 3 个类别的索引分别是0、1、2,根据数据我们能看到名次从好到差排序是2、1、0,显然在类别[ 2 ]中有 2 个国家,分别是沙特,伊朗这两个国家足球水平较好点,接着在类别[ 1 ]中有2个国家,分别为日本,韩国这两个国家足球水平一般,最后在类别[ 0 ]剩下 8个国家中数据值都比较高,其中包含中国[ 50, 50, 9 ],说明中国足球有点差。

6.9每次聚类的结果可能略有不同是正常现象

7、总结

K-Means 算法必须先确定K值,K 值的选定是非常难以估计的,在一定程度上影响结果。而K-Means++ 算法给出了解决这个问题的方案,有兴趣的可以看一下。本实验主要讲解了K-Means,并基于算法进行一个简单案例讲解。

机器学习实践:足球比赛聚类分析--11相关推荐

  1. 【Mo 人工智能技术博客】采用 Python 机器学习预测足球比赛结果

    采用 Python 机器学习预测足球比赛结果 足球是世界上最火爆的运动之一,世界杯期间也往往是球迷们最亢奋的时刻.比赛狂欢季除了炸出了熬夜看球的铁杆粉丝,也让足球竞猜也成了大家茶余饭后最热衷的话题.甚 ...

  2. python模型预测足球_采用 Python 机器学习预测足球比赛结果!买谁赢就谁赢!

    采用 Python 机器学习预测足球比赛结果 足球是世界上最火爆的运动之一,世界杯期间也往往是球迷们最亢奋的时刻.比赛狂欢季除了炸出了熬夜看球的铁杆粉丝,也让足球竞猜也成了大家茶余饭后最热衷的话题.甚 ...

  3. 机器学习预测足球比赛项目——FootBallPrediction

    附: 2020年6月已形成软件,感兴趣朋友联系文末微信获取软件和源码. FBP项目#人工智能 从2017年到现在整整3年了,目前项目生命力很强,也初步完成了一些目标,但对于足球领域人工智能NO.1的愿 ...

  4. 白话贝叶斯理论及在足球比赛结果预测中的应用和C#实现

    离去年"马尔可夫链进行彩票预测"已经一年了,同时我也计划了一个彩票数据框架的搭建,分析和预测的框架,会在今年逐步发表,拟定了一个目录,大家有什么样的意见和和问题,可以看看,留言我会 ...

  5. [置顶]白话贝叶斯理论及在足球比赛结果预测中的应用和C#实现

    离去年"马尔可夫链进行彩票预测"已经一年了,同时我也计划了一个彩票数据框架的搭建,分析和预测的框架,会在今年逐步发表,拟定了一个目录,大家有什么样的意见和和问题,可以看看,留言我会 ...

  6. 机器学习实践:非监督学习-8

    机器学习实践:非监督学习 1.实验描述 本实验通过scikit-learn 工具包完成非监督学习的理解和使用,其中主要包括各种聚类分析算法及其分析能力的对比,使用PCA技术达到处理高维数据的能力等内容 ...

  7. (转)DDD CQRS和Event Sourcing的案例:足球比赛

    原文链接: https://www.jdon.com/44815 在12月11日新的有关DDD CQRS和Event Sourcing演讲:改变心态- 以更加面向对象视角看待业务领域建模中,作者以足球 ...

  8. 30天数据分析与机器学习实践之Day16——Python文本数据分析:新闻分类任务

    30天数据分析与机器学习实践之Day16--Python文本数据分析:新闻分类任务 一.文本分析与关键词提取 1.1文本数据 1.2停用词 1.语料中大量出现2.没啥大用3.留着过年嘛? 1.3Tf- ...

  9. 足球比赛数据可视分析

    点击上方蓝字关注我们 足球比赛数据可视分析 曹安琪1,2, 陈泓宇2, 谢潇2, 巫英才1,2 1 之江实验室,浙江 杭州 310012 2 浙江大学计算机辅助设计与图形学国家重点实验室,浙江 杭州 ...

最新文章

  1. 查找文本(grep)
  2. Android——Fragment介绍
  3. 前端学习(2993):vue+element今日头条管理--加入git管理
  4. 前端学习(902):this指向问题
  5. 一步步编写操作系统 50 加载内核3
  6. 代码调试之-单步调试问题
  7. php5.3 appache phpstudy win7win8win10下 运行速度慢
  8. kotlin中List,Map,数组的使用
  9. 理正深基坑弹性计算方法_理正深基坑软件7.0/理正岩土6.5/理正勘察9.0/理正工具箱7.0...
  10. 农场渲染文件服务器搭建,在渲染农场部署Maya to Arnold
  11. 【小游戏】Flappy bird
  12. 什么是web服务器?有哪些作用?
  13. systemctl与service
  14. fabric cello
  15. Android实用技巧之adb命令:am 命令的使用
  16. ejb2.1中ejbQL的缺点,权且作为笔记
  17. 学业情绪量表数据的基本处理与SPSS分析思路
  18. 小学计算机六年级下教学计划,小学计算机教学计划与小学语文六年级教学工作计划汇编.doc...
  19. 离散数学:赵钱孙李,派谁出国?编程实现
  20. 导入tomcat源码:程序包aQute.bnd.annotation.spi不存在

热门文章

  1. Petalinux 2019.1 工具环境搭建与安装
  2. 【ureport2 vue版本实现】
  3. 2022-2027年中国图书零售连锁市场竞争态势及行业投资前景预测报告
  4. LeetCode 0883「三维形体投影面积」
  5. c语言程序立体几何计算机,立体几何教学中巧妙利用信息技术 -----培养高中学生数学学习的兴趣   张芬     2014年11月10日...
  6. 苹果6s出现连接不上服务器未响应,苹果6s的蜂窝移动数据打开没反应怎么办
  7. 2021-2027全球与中国可持续环保家具市场现状及未来发展趋势
  8. 图像矫正:桶形畸变矫正的原理及python简易实现与加速
  9. Win32开发:完整的开发流程
  10. 【论文笔记】Beyond frontal faces: improving person recognition using multiple cues