原作者: Saurabh Charde
原文链接: https://medium.com/ai-enigma/predicting-pokemon-battle-winner-using-machine-learning-d1ed055ac50
在本文中,我们将使用机器学习来预测宝可梦战斗的胜利者。这是一件令人兴奋的事情,因为我们可以借此预测我们从未见过的战斗的结果。如果您想继续深入了解,可以查看此包含代码的链接(Jupyter notebook)。然后你就可以将这些展示给你的朋友,预测宝可梦的战斗结果使你成为一个专业的宝可梦训练大师!
介绍
大多数人都很熟悉宝可梦系列,它在我们的童年中扮演了不可或缺的角色。最近,Pokemon Go游戏又一次掀起了我们对Pokemon的狂热。现在我们面临着一个问题: 考虑到每一个宝可梦的一些特征,比如它的攻击、防御或速度值等,我们需要预测一场从未发生过的随机宝可梦大战的胜利者。这听起来很有趣!!
接下来在开始之前让我们先熟悉一下背景。
机器学习
预测胜利者的困难在于我们只知道少数的宝可梦,而事实上,目前世界上大约存有800多种宝可梦。因此为了预测战斗的胜利者,我们需要研究所有的800多种宝可梦,观察他们的动作,特殊攻击,比赛等。简而言之,需要考虑的数据十分巨大,因此我们将需要花上几天时间来获得足够的知识,以正确预测一场战斗的胜利者。
这就是机器学习的用处之所在。当你有很多数据,你需要做一些预测(预测今天的天气,根据症状预测疾病等),我们便可以使用机器学习(这非常简单!)。
让我们来看一看数据集
数据集的前5行
数据集是关于特定主题(这里是Pokemon)的大量数据的集合。这个数据集为我们提供了诸如生命点、攻击、特殊防御和是否为传说宝可梦(1与0)等信息。该图显示了前5个宝可梦的数据,但数据集中总共有800个宝可梦(意味着有800行数据)。
现在已经看到了数据集,准备对其应用一些机器学习。
如何应用机器学习
构建完整的ML模型包括三个步骤:
- 建立分类器
- 训练分类器
- 测试分类器
建立分类器
注意:分类器用于将数据分类或分离为类。例如给一张图片,把它归类为狗或猫。
为了从数据中学习,我们需要使用一些ML模型(分类器),这些模型通常是在给定的数据中发现模式的算法,以帮助它们进行预测(混淆?继续读下去)。
对于这个任务,我们将使用一个随机森林(Random Forest)分类器,这是一个更好的决策树分类器的实现。
进一步了解
决策树
假设我们的目标是根据动物的类型、身高、体重或速度等特征来预测动物。使用决策树可以很容易地对这个任务进行建模,如上图所示。因此,在决策树的每个点上,我们提出一个问题,并根据答案将树进一步划分为子树。该过程一直重复直到我们确定至某一只动物。因此,给定一个数据集,决策树分类器将在每个点上提出正确的问题(增加信息增益),以便以增加每个预测的可信度(提高结果的纯度)的方式划分树。
时间复杂度=O(深度)
随机森林
一个简单的随机森林可视化
由于森林是树的集合,因此随机森林分类器使用多个决策树,最后将每个决策树的结果组合起来预测其最终结果。我们可以把从多棵树学到的东西组合成一棵树。与使用单一决策树相比,该方法具有更好的效果。
有100决策树的森林
最后,我们建立一个随机森林分类器如下。n_estimators给出了用于生成森林的决策树的数目(这里使用了100)。
训练分类器
重申这项任务,两个宝可梦各个的功能(速度,攻击等)以及谁将获胜。
分类器的训练与预测精度
我们在Pokemon的数据集上训练(或拟合)分类器(即x_train),并最小化训练集上预测值和实际值(y_train)之间的损失。这里的训练意味着找到数据集中不同特征之间的关系来进行预测。
然后我们计算分类器的准确度,结果是95%(意味着我们的分类器将预测100个匹配中95个匹配的正确结果),这是一个非常好的开始。
到目前为止,我们已经完成了从构建分类器到训练分类器所需的所有步骤,现在我们已经准备好在一些实际的东西上测试它。
测试分类器
时间终于到了,让我们随机给分类器一些宝可梦进行匹配,让它为我们预测谁会赢。我们已将所有这些随机匹配项存储在另一个名为test_data的数据集中。如下图所示:
这两个栏目对应的是即将参赛的宝可梦。我们正在将这两个宝可梦输入分类器,它将返回最有可能的胜利者为那场战斗。记住,分类器不仅仅是随机预测赢家。事实上,它正在仔细分析几个参数,以便做出正确的决定
准备好看赢家了
现在你认为谁应该在大岩蛇和波波中获胜?。
让我们通过机器学习模型来进行预测。
赢家看起来很明显。现在让我们给它一些棘手的问题。
魔墙人偶和可达鸭呢?
魔墙人偶vs可达鸭
事实上,这些匹配从未出现在口袋妖怪系列之前,但我们预测也会给出结果。
谁会赢呢?
如果你仔细研究的话,就会发现魔墙人偶能赢得这场战斗。
结语
在此我们已经看到了一个非常基本的问题,这个问题可以用ML来解决。本文中介绍的概念构成了大多数ML方法的基础。我试着用最简单的方式来解释这些概念,这样每个人都能公平地理解ML是如何工作的,并且可以在现实世界中使用。