基于统计机器学习的DOTA2阵容的最优抉择_第1页
基于统计机器学习的DOTA2阵容的最优抉择_第2页
基于统计机器学习的DOTA2阵容的最优抉择_第3页
基于统计机器学习的DOTA2阵容的最优抉择_第4页
基于统计机器学习的DOTA2阵容的最优抉择_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于统计机器学习的DOTA2阵容的最优抉择TheoptimalchoiceofDOTA2lineupbasedonstatisticalmachinelearning内容摘要论文首先详细介绍了DOTA2以及统计机器学习的背景以及其的现状,然后讨论了用统计机器学习方法探索DOTA2最佳阵容的设计目标,\t"C:/Users/ASUS/Desktop/%E6%AF%95%E4%B8%9A%E8%AE%BA%E6%96%87/report2019-3-8-17-24-07/PaperPass-%E6%97%97%E8%88%B0%E7%89%88-%E6%A3%80%E6%B5%8B%E6%8A%A5%E5%91%8A/htmls/detail_report/right"项目要求和整体项目设计,以及展开项目的具体设计和开发的全面讨论。本文项目功能基于Python的BeautifulSoup、Selenium、Matplotlib等库,编写对应代码而实现了一个DOTA2最佳阵容抉择的项目。项目包括爬虫、统计机器学习等重要功能。关键词:Python、爬虫、数据处理、统计机器学习AbstractThepaperfirstlyintroducesthebackgroundandcurrentsituationofDOTA2andstatisticalmachinelearningindetail,thendiscussesthedesignobjectives,projectrequirementsandoverallprojectdesignofDOTA2bestteambystatisticalmachinelearningmethod,aswellasacomprehensivediscussiononthespecificdesignanddevelopmentoftheproject.BasedonPython'sBeautifulSoup,Selenium,Matplotlibandotherlibraries,thisarticleimplementsabest-teamchoiceforDOTA2bywritingcorrespondingcode.Theprojectincludesimportantfunctionssuchascrawlerandstatisticalmachinelearning.Keywords:Python,crawler,dataprocessing,statisticalmachinelearning

目录第一章绪论 绪论1.1课题背景及意义DOTA2作为一个拥有TheInternational(以下称国际邀请赛)赛事的全球奖金最高的比赛,是一个举世皆知的电子竞技项目。至今,国际邀请赛已经成功举办了9次,第1届仅有1,600,000美金的总奖金,但到了第9届,已经达到33,394,860美金的总奖金,9年的总增长率为2087.17875%,可见国际邀请赛的影响力之广、电子竞技项目的生命力之强、该项目的成长性之迅速。在中国里,电子竞技运动(E-Sport)日渐成熟,从2003年被中国国家体育总局列为中国正式开展的第99个体育项目之后,中国有很多青年也投身于这个行业。在国际上,由于职业选手日渐变多,所以赛事体制也越来越完善。由于在比赛中要经过BP环节和正式比赛环节,需要很多即时的决断与重大的团队决策,而且在大脑高速运转的情况下,反应力也不能下降,因此其比赛强度得到很多传统体育行业及其他行业的人的赞许和认可,其中代表是NBA球星林书豪,其称DOTA2为电子竞技界的NBA。DOTA2是一个ARTS游戏(multiplayerActionRealtimeStrategyGame),中文翻译是多人动作即时战略类游戏,跟一般认知的MOBA游戏(MultiplayerOnlineBattleArena),中文翻译是多人在线战术竞技游戏,是完全不一样的,DOTA2偏向战略,所以游戏里面是有非常多的变数,再加上这个游戏的流行度与奖金池之深,很值得我去运用我所学过的知识去研究这个游戏。在DOTA2里面有一个非常著名的外国职业选手叫Notail,他拿了两届国际邀请赛的冠军,可谓是“前无古人,后无来者”,但他接受采访的时候,也很坦诚的表达出:“到现在还没有人找到这个游戏的正确答案,因为这里面还有太多能发掘的东西,而我想成为第一个能找到这个游戏的正确答案的人。”有很多人就算目标不是成为职业选手,也会受其影响力而参与进DOTA2,就跟喜欢NBA的学生平时喜欢打篮球是一样的,玩家基数多的情况下,自然就会产生大量的比赛数据。职业选手会通过经验去简单分析当前版本的趋势,但更好的是要用到更好的方法去对数据进行处理并分析。因为国内大多数DOTA2玩家都暂不具备该能力,所以研究本课题的意义在于,我将所学过的大数据中的统计机器学习方法,去研究DOTA2阵容的最优抉择。1.2国内外研究现状Python在多年前成为卡耐基梅隆大学(CarnegieMellonUniversity)、加州大学伯克利分校(UniversityofCalifornia,Berkeley)、哈佛大学(HarvardUniversity)、麻省理工学院(MassachusettsInstituteofTechnology)等国外很多大学的计算机专业的程序设计入门语言。目前国内也逐渐开设了Python程序设计课程,Python同时是一门免费而且开源的编程语言,拥有很多功能非常强大的标准库和扩展库,而且这些库都是只要安装了之后,可以随时调用出来使用的。而且Python是一门在国外非常热门的编程编程语言,PYPL是通过谷歌上的搜索频率来创建的流行的编程语言索引,只要该编程语言在谷歌上搜索越多,该编程语言就会被认为流行语言,所以PYPL排行榜是非常的有参考性的。截止到2020年,4月份,在PYPL上,Python以30.61%位居榜首,与上一期的排行榜对比,增长率为3.9%。网络爬虫则是使用Python及其标准库和扩展库、然后根据网页的特性,编写一系列程序的一种技术。使用爬虫需要安装所需要的标准库和扩展库,而且还要学习一系列的网页相关的知识,并根据网页的特点,去编写对应的程序,例如要学习HTTP的基本原理、网页的组成、网页的结构、节点树及节点间的关系、UPI和URL、超文本、HTTP和HTTPS、HTTP的请求过程、网页的请求和响应、静态网页和动态网页、代理的作用、爬虫的代理、数据存储、Ajax数据爬取、动态渲染页面爬取、验证码的识别、模拟登陆等知识。而验证码的识别往往是最困难的,国外最新的深度学习中的PyTorch技术能识别滑动验证码的缺口,总的来说有两种方法,第一种算法是:生成一系列目标所在位置的候选框,然后再对这些框选出来的结果进行样本分类,这算法涉及到深度的卷积神经网络的算法架构,所以准确率会非常搞。第二种算法是:不需要产生第一种算法里面的候选框,直接将目标定位和分类的问题转化为回归问题,因为只需要用到回归算法,所以架构相比第一种方法简单,但准确率会比第一种方法低。这种最新的技术大体上需要以下几步,首先准备数据,训练深度学习模型,训练模型并进行缺口标注,处理完数据之后就对数据进行初始化,初始化完成就预载一些预训练模型,安装必须的库,如PyTorch、TensorBoard之类的扩展库,当准备好之后,就可以开始训练刚刚初始化之后的数据集,最后进行测试,做到这个步骤,就可以识别滑动验证码的缺口了。统计机器学习是入门级别的数据处理的一种方法,但更侧重于解释变量之间的关系,机器学习侧重于做出预测,但是大多数机器学习算法缺乏可解释性,所以很难证明数据中存在的关系。机器学习是基于统计学的,机器学习用的是统计的框架,机器学习涉及到很大量的数据,数据也必须要用到统计学的框架来进行描述。所以学习机器学习的基础是要掌握统计学习。统计机器学习的线性回归跟统计学的线性回归是非常相似的,但只有对统计学的概念有所了解,才能学习机器学习并进行运用,以避免模型的过拟合问题或者会得出一些看起来貌似合理但实际上是错误的理论。1.3课题研究内容在DOTA2中,影响游戏走向的因素有非常多,版本的更新导致的英雄削弱与增强、英雄的技能特性、经济、线权、肉山盾的控制权、控符率、经济的差距,由于其中的经济、线权、肉山盾的控制权、控符率、团队竞技属于比赛中的实时变动的数据,即为动态数据,所以该课题不选择对此进行研究,本课题研究的是那些静态的数据,即比赛后结算出来的数据、英雄的技能特性该两项数据,而这两项数据也会各自细分成很多类别的数据,均为静态的数据,本课题主要是针对这些静态的数据,发掘其中的相关性,并做出对应该数据的分析。因此,本课题研究内容有:1、使用Python及其相关库,利用爬虫的知识、网页的知识在数据网站上爬取第九届国际邀请赛之后、第十届国际邀请赛之前的所有DOTA2职业联赛的数据。数据包含有比赛场数、胜率、KDA、杀、死、助、正反补总数、反补数量、金钱/分钟、经验/分钟、缠绕、眩晕、治疗、减速、沉默、爆发伤害、持续伤害等该数据并进行整理;2、根据其比赛场数、胜率、KDA、击杀、死亡、助攻、正反补、反补数、金钱/分钟、经验/分钟进行初步的分析,寻找合理的统计机器学习方法去进行研究其中的关系,例如发掘胜率与击杀数之间的内在关系、死亡数与正反补数的关系等,得出并得出分析的结果;3、再结合每个英雄的特性,例如是否带有缠绕、是否带有眩晕、是否带有治疗、是否带有减速、是否带有沉默、是否带有爆发伤害、是否带有持续伤害,再将该数据与比赛场数、胜率、KDA、击杀、死亡、助攻、正反补、反补数、金钱/分钟、经验/分钟结合一起进行一个综合的相关性分析;4、对上述两点得出的一系列的相关性分析、统计机器学习分析做出相对应的评价,解释其中的关系;开发技术与工具2.1Python简介Python作为一门解释型、编译性、交互式、面向对象的脚本语言,其设计具有很强的可读性,相比其他语言经常会使用一些特别指定的关键字,指定的标点符号之类的标志,Python具有更加简单、易懂、自由的语法结构。因此,其具有以下优点:编程语言里入门级别的简单、容易学习、免费开源、高层次语言、具备可移植性、具备解释性、面向对象、具备可扩展性、拥有庞大而丰富的库、规范的代码。编程语言里入门级别的简单:相信大家都有考大学四六级英语证书的经验,而Python的程序阅读起来就跟四六级英语的阅读理解一样的简单,对比起其他语言,不会有很多特殊指定的关键字。就例如入门级别的,打印一行“HelloWorld”,只需要一行代码就可以了,而另外的主流语言例如C++、Java,则需要3行以上的代码。由于有Pandas这个库的存在,Python对csv文件的操作也很方便。容易学习:因为Python有相比较于其他语言,比较简单的语法结构。免费开源:Python是自由/开放源码软件之一,可以自由地阅读源代码并进行改动,因此有很多业界的大牛会不断增加其功能高层次语言:用Python编写程序的时候,不需要去像C语言一样,考虑到程序要使用的内存这一类底层的细节。具备可移植性:Python程序可以在各种系统上运行,其中最常用的就是在Windows和Linux上面使用。解释性:在一台电脑上编写好的一个程序,要在第二台电脑上用的时候,只需要在第二台电脑上安装所需要的库和工具,就能正常使用。拥有庞大而丰富的库:本文项目的内容,研究有很多用到库的时候,主要是用了BeautifulSoup、Selenim、Matplotlib这三个库,下文会详细地进行介绍。规范的代码:由于命名的规则没有其他语言那么多限制,而且强制缩进也使得本文的代码很容易读懂。2.2BeautifulSoup简介BeautifulSoup根据网页的结构和属性等特性解析网页,是一个非常强大的解析工具,主要用来做爬虫,以便提取网页中的元素。本质上来说,BeautifulSoup是Python的一个HTML、XML的解析库,提供导航、搜索、修改分析树等功能。使用的时候,只需要去分析网页的JavaScript代码,HTML代码,分析CSS结构,就能编写程序提取其中的元素。然后要注意编码格式,BeautifulSoup提取出来的文本默认是UTF-8格式,但本文项目主要是以csv的形式去进行存储,因此要将UTF-8转换成ANSI格式。BeautifulSoup提取数据的流程主要有以下几种方法:1、使用节点选择器,直接调用节点的名称就可以选择节点元素,再调用String属性就能得到节点内的文本,用该方法提取的时候,有嵌套选择、关联选择的进阶用法;2、使用方法选择器,不根据属性来选择,而是调用BeautifulSoup的find()方法传入属性或文本,从而根据条件查找符合条件的元素;3、使用CSS选择器,如果对Web开发比较熟悉的,用这个方法的效率是相对来说会高过前两种方法的,调用select()方法,传入相应的CSS选择器,就能提取我们想要的东西。可以嵌套选择、获取属性进行选择、获取文本进行选择。使用BeautifulSoup的时候需要注意的是:使用节点选择器时,节点选择速度快但是筛选功能弱;使用方法选择器时,查询匹配单个结果应该使用find()方法,查询多个结果的时候应该使用find_all()方法;使用CSS选择器时,对CSS选择器熟悉的话,务必要用select()方法,因为效率会前两种方法高;2.3Selenium简介Selenium是一个自动化测试工具,利用它可以模拟鼠标点击、下拉等动作,只要是能看到的,都能用Selenium这个工具爬取下来。使用Selenium之前,需要安装浏览器驱动,建议是Chrome浏览器,并安装对应版本的ChromeDriver这个驱动。Selenium功能强大之处有以下几点:1、可以声明浏览器的对象,除了Chrome,还支持Firefox、Edge等,手机端的浏览器有Android、BlackBerry等,同时也支持编写自动化工具的时候,经常会使用到的无界面浏览器PhantomJS;2、访问页面的时候只需要参数传入链接URL,用get()方法去请求页面;3、查找单个节点的时候,我们可以用find_element()去获取,并进行一些对应该节点的模拟鼠标点击、鼠标下拉、键盘输入、填写表单等操作。查找多个节点的时候,只需要把find_element()改为find_elements()即可;4、对节点进行交互,即模拟鼠标、键盘等操作,例如对文字进行输入、删除的时候可以用send_keys()、clear()等方法,模拟点击的时候用click()方法,获取文本的时候用text()、提交表格的时候用submit()、获取CSS属性的值的时候用value_of_css_property(),这些都能在Selenium的节点交互API里面可以实现的操作;5、动作链,可以对节点进行模拟鼠标的拖拽操作,将某个节点从一处拖拽到另外一处;6、执行JavaScript,例如可以用execute_scripu()方法将进度条下拉到最底部;7、使用get()方法可以获取节点的属性、文本值、id、位置、标签名、大小等值;8、延时等待功能,例如我要模拟鼠标悬停的时候,可以设置悬停的等待时间为0.2秒;除了这基础的八点功能之外,还有更高阶的功能,但本文只运用到了该八点功能,因此不作进阶功能的介绍。2.4线性回归方法简介介绍线性回归方法之前,首先要先介绍一下统计机器学习,运用模型对数据进行预测与分析,基于数据构建概率统计模型,这称之为统计机器学习。统计机器学习的对象是数据,提取数据特征,抽象数据模型,发掘数据中的知识,然后就能对数据作出分析与预测,但只能对那些有一定规律性的同类数据才有研究价值。统计学习的目的自始至终都是对数据进行预测和分析,并且能根据对已知数据进行预测和分析得出规律与研究,去预测未知的新数据,通常建立的模型越精准,所预测的值就会越精准,学习效率会越高。统计机器学习主要分为监督学习、无监督学习、强化学习三大类,主监督学习、主动学习两小类。统计机器学习主要特点是:1、建立在计算机及网络上的;2、以数据为研究对象;3、对数据进行预测与分析;4、以方法为中心,构建合理的模型并应用模型进行预测和分析;5、涉及概率论、统计学、信息论、计算理论、计算机科学等多个领域;线性回归是回归分析中的一种在实际应用中广泛使用的类型,是学习更高级的方法之前的一个很好的入门方法,很多更高级的方法也可以视为线性回归的延伸,主要是使用线性预测函数来建模,找到最佳拟合直线,并根据数值的分布,进行数据的预测与分析,线性回归的一般方法为以下六个步骤:收集数据、准备数据、分析数据、训练算法、测试算法、使用算法。使用线性回归的时候,会理解预估系数、平方误差等概念,使用Matplotlib进行画图,画出散点图,并画出数据拟合线,判断模型的准确性后,便可以开始进行具体的分析。2.5K-Means方法简介研究该课题,最开始要先决定最合适的算法,统计机器学习基于训练数据集,根据学习的策略,从假设空间中选择最优解的模型,根据我所学过的方法来进行对比,发现与“类”、“簇”有密切的关系的K-Means算法比较符合我这个课题,因为DOTA2英雄中的定位分为五大类:Carry(核心)、Mid-lane(中单)、Off-lane(劣单)、Support(辅助)、Hard-support(纯辅助),有五大类,所以,选用的是一半用来划分成“类”与“簇”儿进行分析的K-Means算法。K-Means是属于无监督学习,是一种聚类算法。聚类算法有层次聚类和K均值聚类,K均值聚类即为K-Means,本文选用的K-Means去进行研究。聚类是针对样本,根据特征的相似度,划分成若干个“类”或者“簇”,一边分析问题。聚类的目的是通过得到的类或者簇来发现数据的特点,并且对数据进行处理,根据样本的相似度或距离将其进行归类,并得到散点图,并对数据进行一系列的分析与预测,由于本课题研究的是DOTA2英雄阵容胜率的个中关系,因此选用的是K-Means算法,以便直观地看出各个位置的优劣性。K-Means是一个不断进行迭代的算法,一次迭代会分成两个步骤。第一步先在坐标系中选定好k个类的中心,然后将样本数据里面的数据,一个个插入到与其最近的中心的类附近,然后得到一个聚类的结果;第二步是更新每个类的样本的平均值,然后把这个平均值作为类的新的中心,然后再把数据一个个插入到其中,循环以上步骤。K-Means算法有一个致命的缺点,就是那个预先指定的k值,会影响到收敛性、会影响到全局最优、会对初始类应如何选择造成麻烦,而解决以上问题的方法是尝试用不同的k值聚类,检验出每个k值所得出的聚类结果的质量,推测出最优的k值。不过,由于DOTA2这个游戏的特性,分为了五个位置,因此本课题运用K-Means算法的时候,不需要去尝试用不同的k值聚类,直接选取k值为5进行后续的分析与预测。项目分析与设计3.1可行性分析从经济效益来看,根据Steam的热度排行榜来看,DOTA2常年位于前三名,而在推特的搜索趋势里面,热度也是一直都保持着很高,这多亏于社区的努力、玩家的坚持,更重要的一点是,DOTA2拥有一个奖金最高的世界级的赛事——国际邀请赛,只要这个赛事不停办,会一直有人投入该行业,无论是以什么职业去投入,包括不限于职业选手、教练、心理健康师、营养师、数据分析师等。而且一年比一年高的奖金,更加更加值得去投身该行业,但目前国内该行业仍处于不完善的阶段,尤其是缺乏专业的数据分析师,因此如果有人涉足这个领域,得到的收益远比想象中的要高。3.1.1技术可行性开发遇到的问题更多的是在配置开发环境需要电脑的支持,还有技术的支持,安装某些库的时候需要代理,着眼于开发人员的限制,由于是个人开发,因此采用了比较保守的成熟的技术,因为成熟技术除了能满足系统开发需要,其精细程度、优化程度远比新技术要好,而且机器学习涉及的知识过于深奥,因此只采用学校学过的知识,并加以深化去完成本课题的项目。利用我个人现有的技术,性能目标可以达到,开发人员数量和质量要求能满足,功能目标能打到,开发能够完成。3.2项目总体设计项目总体设计包含两大类,分别是爬虫与统计机器学习,其中有六个部分,详见图3-1。图3-1总体设计图

项目实现4.1利用BeautifulSoup爬取DOTAMAX网站的数据首先是爬取DOTAMAX上的数据,而发现DOTAMAX需要登录账号之后才能浏览其中的内容,因此导入requests库,然后编写headers,向网页发送请求报头,这里使用了Cookie登录帐号,注意,使用Cookie登录的时候,需要先登录一下自己的帐号,然后打开F12,找到帐号登录的那一串Cookie,这里就有一个缺点,就是该网站的保持登录状态为7天,7天后,Cookie就会过期,到时就要更换一串新的Cookie,不然代码就运行不了了。然后在爬取之前,先导入BeautifulSoup这个库,还有其他所需要的库,例如pandas、numpy,这些都是对数据进行整理的库,把数据存储到csv文件里面,方便之后的数据分析。然后使用XPath去获取页面对应的元素,XPath是一门在XML文档中查找信息的语言,可通过元素和属性进行导航,最重要的是,对于一般开发人员来说,可以用到Chrome浏览器自带的游猴社区,里面有一个XPathHelper的脚本,然后可以在上面尝试XPath的位置,如输入“//div”的话,他会找出所有div下的元素,然后再根据class,去找到我们需要的元素的位置,所以,使用XPath的话,获取想要的元素相对来说会简明易懂一点。当然,查看网页源代码也是可以的,只不过没有用XPathHelper那么地直观。然后开始进行爬取,发现英雄名称是用<a>标签独立出来的,因此爬取的策略是先对英雄名称进行爬取,再爬取在同一组里面的“比赛场数、胜率。KDA、杀、死、助、正反补、反补总数、金钱/分钟、经验/分钟”,分别保存到两个csv文件里面,之后再对两个csv文件进行合并。然后爬取“比赛场数、胜率、KDA、杀、死、助、正反补、反补总数、金钱/分钟、经验/分钟”这组信息的时候,发现爬取下来的信息,会全部塞到同一个列表里面,因此需要numpy库的划分列表的方法,根据英雄的个数(英雄名称的总数)、该组数据的项数(分为10个项),因此按照英雄的个数,对所有爬取下来的英雄数据进行预划分,爬取的时候,每10个换行,然后行数根据英雄的个数来定,该段代码的主要逻辑详见图4-1。图4-1使用BeautifulSoup库进行对网站的爬取然后爬取第九届国际邀请赛之后,第十届国际邀请赛之前的职业联赛的数据,总共爬取了20组数据,下面会对这20组数据进行分析。4.2利用Selenium模拟鼠标悬停收集DOTA2官网的数据接下来是去DOTA2官网爬取我想要的英雄特性的数据,发现DOTA2官网不需要登录账号也能直接进行爬取,但遇到一个问题,就是一个页面有120多个英雄,当鼠标移去英雄上面,然后有个地方会跟着你鼠标停留的英雄,显示该英雄的特性,因此该网站为动态渲染网站,不能使用BeautifulSoup去进行爬取,但遇到这种情况的时候,能用到Selenium的自动化工具去进行爬取。首先如上文所说的,要先安装好Selenium库及Chrome浏览器对应版本的ChromeDriver,编写代码之前,先要导入Selenium库,然后要模拟鼠标移动与悬停,因此需要用到Selenium的动作链,因为悬停是需要有时间延迟的,所以还要导入time库,设计一个悬停的时间。开始对DOTA2官网的英雄特性数据爬取,他每个英雄的标签都是“link_英雄名称”,因此只要模拟鼠标停留到每个英雄的标签上,就能进一步获取鼠标在该标签停留的时候,网站所响应的数据,获取所响应的数据时,还是使用了XPath进行元素的定位,因为XPath使用起来真的太方便了,而且很精准地能获取到我想要的元素。因为有120多个英雄,所以设置了一个循环遍历,获取数据时,也遇到不能存入列表的问题,这时候只要把元素强制转换成text格式,就可以顺利的存入到列表里面。改段代码的主要逻辑见图4-2。图4-2使用Selenium模拟鼠标悬停对网站进行爬取到此,便完成了数据的爬取,由于官网的数据没有我理想中的那么完善,因此用了人工的方法,去补充完整想要的数据,例如添加了“沉默”、“缠绕”这两个英雄特性,只是更精准的分析,因此花了几分钟时间用人工进行了补充。接下来开始对这堆数据进行分析与预测。4.3对数据画出相关性矩阵、散点图并进行分析 分析数据时,为了让数据有时间的相关性,我添加了比赛时间这一项新的项,可以更加直观的看出按照时间的推移,版本的更迭,挖掘英雄与数据的相关性。然后由于要保证数据的质量,因此要进行异常值的分析,这有利于最终得出的模型具有稳定性,本次课题运用的是简单的统计量分析,我们对采集到的的数据做一个描述性的估计,由于DOTA2游戏的特点,版本热门英雄的出场率是非常高的,但这非常高的出场率,可以认为是特点,所以不需要把最大值给剔除,而只有那些出场率过低的英雄,会导致数据出现误差,因为出场次数过低的英雄,有可能是一个非常厉害的选手玩的胜率很高,也有可能是不怎么样的选手玩的胜率很低,所以剔除那些出场率的英雄,部分英雄的上场次数过低,而次数过低会导致有可能胜率会异常的高,或者胜率异常的低,这不足以能显示出该英雄的特征,而且出场次数过低的英雄都可以视为版本弱势英雄,均不参与到本次课题中的讨论。因此,本次课题将出场次数低于10次的英雄都定义为异常值。首先对出场次数不足10次的英雄进行剔除,并合并20个csv文件,剔除不足10次的英雄的代码逻辑主要如下,见图4-3。图4-3删除上场次数少于10次的英雄而合并多个文件的代码逻辑,见图4-4,主要因为要进行的是行合并,因此index的值要定义为“False”。图4-4合并csv文件做完这个步骤之后,就能得到一个整合了所有数据后的csv文件,注意:由于csv的默认编码是ANSI,而不是utf-8,因此需要将编码强制改成ANSI。开始进行简单的数据分析,首先是导入所需要的库,包括有:pandas、seaborn、matplotlib、sklearn、numpy这五个库,然后画出热力图,即为相关性矩阵,画相关性矩阵的意义在于可以更加直观地看出每个系数之间的关系,从而探索出每个数据之间到底有什么联系,而不是依据经验来判断,毕竟用数据来证明才是硬道理。但肯定也会出现一些相关性是符合我们以往的经验总结的,所以本课题是要发掘那些跟以往经验相违背的系数之间的关系,根据相关性矩阵,见图4-5。图4-5英雄数据的相关性矩阵该相关性矩阵的横坐标为“比赛场数、胜率、KDA、击杀、死亡、助攻、补刀、反补、GPM/min、XPM/min,比赛日期”,纵坐标为“比赛日期、XPM/min、GPM/min、反补、补刀、助攻、死亡、击杀、KDA、胜率、比赛场数”。正相关的组合有:KDA与XPM/min、KDA与GPM/min、KDA与反补、KDA与补刀、击杀与XPM/min、击杀与GPM/min、击杀与反补、击杀与补刀、死亡与助攻、胜率与助攻,胜率与KDA。负相关的组合有:KDA与死亡、击杀与死亡、击杀与助攻、死亡与XPM/min、死亡与GPM/min、死亡与反补、死亡与补刀。其他的相关性不强,没有太多的联系。但值得一提的是可以看出该相关性矩阵可以看出KDA除了跟死亡是成负相关性,这是肯定的,但让我惊讶的是,跟助攻的相关性竟然接近于0,因为KDA的计算方式是(Kill+Assist/Death)的数值,所以跟助攻的负相关性,无限接近于0,而死亡跟助攻是正相关性。因为KDA跟助攻的是负相关性,死亡跟助攻是正相关性,结合该两种相关性,这可以分析出来就是,这项数据应该是辅助英雄对此产生了影响,一般辅助都是死亡次数比较多,而助攻也会非常多的,所以才会出现这种很奇怪的情况。补刀总数肯定是跟金钱/每分钟、经验/每分钟都是有很强的正相关性,这是毋庸置疑的,但值得注意的就是,反补跟金钱/每分钟、经验/每分钟的正相关性也是很高,因此可以用这个静态数据推断出唯一一个静态数据,就是线权。就是在职业比赛中,线权是非常关键的,线权除了选手个人能力,也要看阵容的强弱,因此本课题探讨的是阵容的最优抉择,初步分析是要选择那些强势的英雄,而什么英雄会比较强势,要跟相近出场次数的英雄相比,求出胜率较高的英雄,这是要等接下来的使用到线性回归学习分析才能够得出结论,因此本课题的目标也是要找出那些在各个位置里面强势的英雄。图4-6胜率、比赛场数、补刀、KDA之间的关系该图横坐标是胜率、比赛场数、补刀数、KDA的柱状图和散点图,纵坐标是KDA、补刀数。比赛场数、胜率的柱状图和散点图。该交叉图可进行6种图的交叉分析。再次验证相关性矩阵的准确性及其科学性。1、KDA与胜率,对应图4-6的第四行第一列,相关性不强,这也是相关性矩阵那边能得出的结论;2、胜率与补刀数,对应图4-6的第三行第一列,相关性不强,没有很大的特点,也是在相关性矩阵那边的出的结论;3、胜率与比赛场数,对应图4-6的第二行第一列,相关性不强,但给了我一个提醒,就是有些英雄盘数很少,胜率却异常的高,或者异常的低,因此之后的线性回归分析要去除出场次数10场以下的英雄。4、比赛场数与补刀数,对应图4-6的第三行第二列,这幅图能看出来,有些比赛场数多的英雄,补刀数是两极分化的,但这并不是异常值,而是DOTA2的位置而导致的,核心和辅助,核心是要补刀的,辅助是不需要补刀的。5、比赛场数与KDA,对应图4-6的第四行第二列,这幅图也是没有多大的相关性。6、补刀数与KDA,对应图4-6的第四行第三列,这幅图是有很强大的相关性,通常补刀数越高的,KDA就会越高,因为在DOTA2中,补刀多的通常都是核心位置,核心位置战绩会比辅助位置的战绩好很多。然后再对金钱/每分钟和经验/每分钟匹配其他数据去进行分析,如下:图4-7击杀数、金钱/分钟、经验/分钟之间的关系图4-7的横坐标是“击杀数、金钱/分钟、经验/分钟”,纵坐标是“经验/分钟、金钱/分钟、击杀数”。能看出来击杀数与该两项数据的正相关性是非常强的,当击杀数变多的时候,该两项数据也会随着变多。由图第二行第一列可以看出来,击杀数越多的英雄,其金钱/分钟也会随着变高,这幅图值的留意的是,有少数英雄的击杀数很低,但他的金钱/分数也很非常的高,因为这个游戏除了击杀能获得金钱以外,补刀也是有钱的,这些应该就是那些策略以带线为目标而胜利的的英雄。第三行第一列能看出来,因为由于游戏的特性,击杀会获取经验值,因此击杀数越高,经验值也会越高。而第三行第二列能看出来,一般金钱/分钟越高的英雄,经验/分钟也会越高,但值得注意的是,有一些金钱/分钟很高的英雄,而他的经验/分钟是没有达到预期值的,所以这是那种以刷钱为目的英雄。图4-8死亡数、金钱/分钟、经验/分钟之间的关系图4-8的横坐标是“死亡数、金钱/分钟、经验/分钟”,纵坐标是“经验/分钟、金钱/分钟、死亡数”。能看出来,死亡数与该两项数据的负相关性是非常强的。从第二行第一列能看出来,死亡数越多的英雄,金钱/分钟会月底,但值得注意的是,从横坐标为2.5~5.0之间,也是落差非常大的,有些死亡偏低的,由几个英雄的金钱/分钟是非常高的,因此可以选择这些英雄作为首选,这样会更好。从第二行第二列能看出来,死亡数越多的英雄,他的经验/分钟是会越低的,因为经验的获取是由击杀小兵和击杀英雄获得的,因此死亡的时候,是不能获取到经验的,因此死亡越多经验获取的也越低。但从值得注意的是,死亡数为5的横坐标,经验/分钟的分布是不均匀的,有很高的也有很低的,这个问题的原因是核心和辅助,核心的占线时间会长,辅助的占线时间会短,因此会出现这种差别图4-9助攻数、金钱/分钟、经验/分钟之间的关系这幅图的横坐标是“助攻、金钱/分钟、经验/分钟”,纵坐标是“经验/分钟、金钱/分钟、助攻”,能看出来助攻跟这两项的数据的相关性不明显,因为随着助攻数的变多,该两项数据没有明显的变化,而是分布的非常均匀,所以由此可以判定助攻数并不能作为一个标准去衡量一个英雄。图4-10补刀数、金钱/分钟、经验/分钟之间的关系图4-10的横坐标是“补刀数、金钱/分钟、经验/分钟”,纵坐标是“经验/分钟、金钱/分钟、补刀数”。很明显的能看出来,补刀数跟该两项数据是有非常强的相关性,这也跟前面击杀数与金钱/分钟、经验/分钟的结论是有对应关系的。那幅图有些英雄的击杀数低,但金钱/分钟却异常的高,就是在本图里面,那些补刀数高的英雄。但跟那幅图对应的,也有一些奇怪的例子,请看第二行第一列的图,补刀数在400左右的地方,有5个是不符合预期的,他们的金钱/分钟是异常的高,所以这些都是击杀数多的英雄,导致金钱会多很多。所以结合两种情况来分析,选择阵容的时候,可以根据这些具有很突出的特点的英雄,决定选一些偏激进的打法,还有就是偏策略胜利的打法。图4-11反补数、金钱/分钟、经验/分钟之间的关系图4-11的横坐标是“反补数、金钱/分钟、经验/分钟”,纵坐标是“经验/分钟、金钱/分钟、反补数”。反补数是DOTA2的一种特殊的机制,可以反补自己的小兵,从而获得该小兵的1/3的金钱,这要考验职业选手的技术与线权的控制,在一般的认知里面,反补并不是一项很重要的影响游戏的标准的,但是从分析来看,反补的影响仅次于补刀,因此强势的英雄是很有必要的,本小节所要传达的是,因为胜率、比赛场数与其他数据的相关性不强,然后线权是很关键的,英雄的强弱决定这线权,因此想要抉择出好的阵容的话,需要进行进一步的机器学习,因此要用到以下的线性回归方法和聚类分析方法。4.4利用线性回归预测国际邀请赛的强势英雄线性回归的详细理论已在上文阐述,而完成本课题的项目时,本项目用到的线性回归的几个步骤如下,以横坐标为出场次数,纵坐标为胜率:1、获取特征和目标变量的值;2、创建一个线性模型的对象;3、训练模型;4、绘制点;5、绘制最佳拟合直线;具体的代码如图4-12。图4-12线性回归实现代码图4-13全部数据的线性回归分析该图的横坐标是比赛场数,纵坐标是胜率。然后首先是观察所有第九届国际邀请赛之后、第十届国际邀请赛之前的全部数据的线性回归图,图的重点是前面的部分,一般来说,出场率高的英雄也就是热门英雄,所以出场率高的英雄不一定就是非常强势的英雄。这也改正了很多人的误区,不一定热门就是强势,热门的、出场率高的英雄,他的胜率有可能也会很难看。注:绘制该图时,已删除出场次数为10场以下的英雄。接着就是用最新的数据来预测第十届国际邀请赛的热门英雄,因为版本不会有再次大的改动了,而且第十届国际邀请赛在往年的时候,哪个战队统治了四月份的版本,那么国际邀请赛已经很大概率会由哪个战队拿冠军,因此4月份的数据对于国际邀请赛来说是非常强力的,因此着重分析一下最新的这场CDA联赛的数据,见图4-14。图4-14最新一次比赛的线性回归分析(未删除出场次数10场以下的英雄)该图的横坐标是比赛场数,纵坐标是胜率。这个CSV并没有删除出场次数10场以下的英雄,导致拟合直线到了胜率最高的一端已经突破了60%,这在任何一个正常的游戏里面,都是不可能存在的,因为这暗示着游戏的不平衡,这也解释了为什么我在绘制上一个线性回归图的时候,把出场次数在10场以下的英雄都删除了,因为会让模型失真。因此把符合条件的给删除,再进行一次线性回归,见图4-10。图4-15图4-15的横坐标是比赛场数,纵坐标是胜率。删除了出场次数为10场以下的英雄之后,拟合直线就很正常了,由该图可以看出,出场次数高的英雄并不代表他符合期望的胜率,例如出场次数为62次的玛尔斯的胜率只有45%,出场次数为57次的半人马战行者的胜率只有47%,出场次数为55次的拉比克的胜率只有42%,出场次数为51次的灰烬之灵的胜率只有49%,而被众多比赛解说所忽视的石鳞剑士的出场次数高达57次,胜率达到了68%,这是非常恐怖的。因而可以着重在BP选择阶段,选择拟合直线以上的英雄,进行阵容的搭配,在无视英雄搭配的情况下,会让胜率变高。所以外行看热闹,内行看门道,所以也是本课题的目的之一,抛砖引玉,并不是纸上谈兵,而是真真切切的用数据来说事。这样才能让这个电竞的数据分析变得更加科学。4.5利用聚类分析判断每个位置的英雄的优劣性接下来利用无监督学习的聚类分析来看看每个位置的强度,这样可以能在比赛中,着重要打哪条路,帮助哪条路打出优势,而不是帮一些劣势的路。有一句话在电竞圈里面非常著名的:“帮优不帮劣”,其实电竞跟生活的联系是密切相关的,因此这句话是有社会的经验去证明的,就是“先富带后富,实现共同富裕”。先帮助英雄占优势的线,掌握线权的同时,打出更大的优势,然后可以带队去跟对面的团队碰撞,这样会让游戏变得更加轻松,让胜利来的更加容易。在上文所说的,DOTA2分为五大类:Carry(核心)、Mid-lane(中单)、Off-lane(劣单)、Support(辅助)、Hard-support(纯辅助),因此聚类分析的k值选取5,具体的步骤为:1、聚成k类数据,并发数设为4,最大循环设为500;2、因为k值取5,所以聚成5类数据,统计每个聚类下的数据量,并且求出他们的中心;3、给每一条数据标注上被分为哪一类4、进行可视化并绘图具体的代码见图4-16。图4-16K-Means聚类分析代码我将0类设置为红色的圆点,1类设置为绿色的圆点,2类设置为蓝色的“*”,3类设置为黄色的“^”,4类设置为红色的“<”,详细的数据见图4-17。图4-17K-Means聚类分析的数据按照步骤、按照设置好的颜色与符号绘制出K-Means聚类分析图,图见4-18。图4-18K-Means聚类分析的图表从聚类之后的数据,根据DOTA2的位置分配来看,4类是Carry(核心)、2类是Mid-lane(中单)、0类是Off-lane(劣单)、1类是Support(辅助)、3类Hard-support(纯辅助)。而刚刚的设置里面,0类为红色圆点,1类为绿色圆点,2类为蓝色“*”,3类为黄色的“^”,4类为红色的“<”。因此,由图可以发现出以下的规律:1、在传统的认知里面,中单是影响局势的点。但是中单集中分布在第二、第三象限,因此从数据上来看,中单在现版本对局势的影响不大,所以选取中单英雄的时候

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论