雷锋网 AI 科技评论按:本文作者朝阳,原文载于集智专栏,雷锋网 AI 科技评论获其授权发布。
机器学习不只是书本和文档中的枯燥理论,事实上,机器学习方法已经可以应用在我们日常生活的很多场景中,甚至是我们在玩游戏的时候,机器学习也能帮我们一起哈啤。
比如在玩Dota2的时候,大家除了经常抱怨服务器问题,另外一个频繁出现的问题就是:「卧槽这么多英雄我该玩什么才好,随机吧又怕随出个不会玩的,选个大哥吧又怕背锅。。。快快快开始掉钱了,选什么选什么。。。算了还是随机吧~~~卧槽米波!!!」
玩米波需要超高的手速和手感,因此不是所有玩家都能玩米波
选英雄绝对是一个难题,对于职业选手而言更是如此,赛前BP时如果出现问题将会直接导致比赛失去悬念,那么冥冥之中有没有什么东西能在我们选英雄的时候帮我们提高胜率呢?当然有,机器学习就可以帮我们选出一手好英雄。
好的BP对于职业比赛而言非常重要
Reddit上面的网友Andrei Apostoae刚刚发布了一个很有意思的机器学习项目(网站地址见文末),叫做Dota2 Predictor。这个项目就是使用机器学习中的神经网络以及逻辑回归方法,通过分析50万场Dota2比赛来帮助大家选择比赛中的最后一个英雄,以及针对对战双方的英雄阵容来预测比赛胜率。这个使用Python编写的程序同时提供了GUI界面,其界面如下:
如上图所示,在输入完9个已选英雄然后再输入平均天梯分之后,就可以让程序为你推荐一些最能带队伍走向胜利的英雄来供你选择。
根据作者的说法,该算法的最终预测可靠性可以达到0.63的ROC AUC评分——确实不是很高,但已经非常不错了,要知道影响一场比赛的可不仅仅是阵容,选手的状态、发挥以及一些偶然因素会更加关键。而如果仅凭阵容就能占得一丝先机,对于队伍而言已经是再好不过了。
该程序使用Python 2.7编写,程序内同时提供了比赛数据下载和模型训练的接口,以便大家自行使用最新版本的比赛结果来进行预测。程序默认提供了50万场比赛的训练结果模型,而且为了提升精准度,算法考虑到了用户的天梯分(MMR)对于比赛结果的影响。当然,通过这个程序我们也可以轻松得到当前版本下各个英雄的平均胜率比较。
这个工具一个最大的作用就是可以通过阵容来预测每一方的胜率,我们这里不妨使用之前的比赛来测试一下。我们选取了TI7预选赛中LGD对阵VG的一场比赛,其对战阵容是这样的:
我们将所有英雄输入预测程序,然后点击预测按钮,程序给出了如下的反馈:
(职业选手的天梯分一般都会高于6000,有些选手因为擅长打天梯所以分数会特别高,但不具有普遍参考性)
根据程序的预测,夜魇方(Dire)有56.12%的概率获胜——这个胜率并不是非常高,意味着双方的阵容基本势均力敌,夜魇方只是略占优势。
那么真实的比赛结果呢?其实是LGD的天辉方获得了最后的胜利,程序预测失败了——但是,让我们不妨来看一下比赛的进程:
从经济曲线中我们看出,夜魇方其实在中期具有很大优势,直到55分钟才突然崩盘,这可能源于一次失误,但是我们已经可以知道,阵容上的部分优势已经帮助夜魇方在中期建立了较大优势,只是后期的发挥影响了比赛结果。程序的预测虽然是错误的,但并不是毫无意义的,夜魇方的英雄搭配仍然值得推荐!!
我们再来换一场比赛看看,我们选取了一场TI7预选赛南美赛区的比赛(有点菜鸡互啄的味道)。我们直接上程序的预测结果:
我的天夜魇胜率这么高,那这天辉方还打个毛——事实上比赛结果也确实是这样,天辉被从头虐到尾,输的找不到北。
但是这个程序还有另外一个用途,就是可以帮助我们找出导致队伍胜率这么低的罪魁祸首——也就是找人背锅。在上面的比赛中,如果我们把沙王换掉,比如说换做大屁股试试看。
我们可以看到把沙王换掉之后的结果发生了巨大的变化,天辉方变成了有优势的一方,这说明程序认为沙王这一手选的非常失败,而真实比赛的结果呢?让我们来看一看:
事实确实如此,沙王KDA仅有1,死亡次数达到10次实在是惨不忍睹。
当然,程序也仅仅是程序,并不具备未卜先知的能力,所作出的预测也仅仅具有参考意义。经过多次尝试之后,我们会发现程序的某计算过程很容易陷入局部最优,比如仅仅因为宙斯(zeus)的总体胜率很高,程序就会频繁向玩家推荐使用宙斯这个英雄;又因为某些英雄(比如小精灵)的登场概率很低,程序就会对这些英雄的胜率做出错误的估计。
另外一点,由于训练过程所分析的数据维度有限,某些阵容分析也会与大家的直觉相悖。比如说该程序在某一方已经拥有四个Carry的时候仍然会向玩家推荐幽鬼这个英雄。对于这一问题,作者解释说因为程序并未分析阵容的位次而仅仅是分析过往比赛中英雄之间的相互影响状况,所以导致最终推荐结果可能仍然无法贴近现实的比赛结果。也就是说,这个项目中用到的算法仍然有着很大的进步空间,愿意研究的同学可以前往 https://github.com/andreiapostoae/dota2-predictor 下载源码并进行调试。
PS. 我站之前也做过类似的实验项目,不过当时的研究重点是集中于某个英雄本身而不是比赛总体的阵容搭配,有兴趣的读者可以前往 https://jizhi.im/blog/post/dota2dom 一探究竟。