我正在尝试根据给定的英雄选择预测公开的DotA 2比赛结果。对于人类来说通常是可能的。给定一方只能有2个结果:是胜利还是失败。

实际上,我是机器学习的新手。我本来想做一个小型项目,但是已经花了我两天的时间。

因此,我制作了大约2000场比赛的数据集,并且技能水平大致相同。每场比赛都包含13 000个特征。每个要素都是0或1,并指定辐射是否具有某个英雄,是否可怕是否具有某些英雄,辐射是否一次具有一个而又可怕另一个(反之亦然)。所有组合总计约13000个功能。当然,大多数都是0。标签也为0或1,表示Radiant团队是否获胜。

我使用了不同的训练和测试集。
Logistic回归分类器为我提供了100%的训练集准确度和58%的测试集准确度。

另一方面,SVM在训练中得分为55%,在测试中得分为53%。
当我将示例数量减少1000个时,我得到了54.5%的培训和55%的测试。

我应该继续增加示例数量吗?
我应该选择其他功能吗?

如果我添加更多英雄组合,功能编号将会爆炸。或者也许没有办法仅根据所选英雄来判断比赛结果,而我需要获得有关每个玩家在线评分和所选英雄的数据等等。

基于训练示例数量的预测准确性图:



查看我添加的2张最新图表。我认为我取得了不错的成绩。
也:
1.我请2个朋友预测10场比赛,他们俩都预测6场正确。就像您说的那样,这等于60%。 10场比赛不是很大的比赛,但是他们不会为更大的比赛而烦恼。
2.我下载了40万个最新的Dota比赛。 MMR> 3000,仅所有选择模式。假设每年进行10亿个Dota比赛,那么400k来自同一补丁。
3.结合双方的英雄选择是最原始的想法。另外,Dota中有114位英雄,所以我现在有228个功能
4.在大多数比赛中,赔率或多或少是相等的,但是只有少数几支球队的选秀权,从小到大。

我要你做的是验证我的结论,因为对于线性模型,我得到的结果太亮了。

[概率测试] [2]

Actual probabilites and predicted probability ranges

distribution of predictions by probability range

最佳答案

这里的问题与您的断言有关,即根据英雄选拔预测Dota 2比赛“通常对人类而言是可能的”。对于此特定任务,可能的准确性可能比其他任何事情都低。我观看了很多Dota,即使您专注于专业比赛,基于英雄精选的脚轮的准确性也相当低。我非常初步的分析将其准确性控制在60%的裂痕距离内。

其次,英雄挑选实际上决定了多少次Dota比赛?不是很多在绝大多数情况下,尤其是在技能水平变化很大的酒吧比赛中,团队合作比英雄选择重要得多。

这是问题的第一个问题,但是在组织问题的方式上肯定还有其他大问题,可以帮助您获得另外几个准确性点(尽管我再次怀疑您能否达到60%以上)

我的第一个建议是改变生成特征的方式。用2k个示例向LR模型中提供13k要素是灾难的根源。尤其是在Dota的情况下,单个英雄没有多大关系,协同作用和反作用极为重要。首先,将两边的英雄选择串联起来,将您的功能数减少到200个左右。光辉为111,地雷为111,如果选择英雄则为1,否则为0。这将有助于过度拟合,但是随后您会遇到LR问题并不是特别适合该问题的问题,因为各个英雄的关系并不大。

我的第二个建议是将匹配搜索限制在一个补丁上,最好是在以后有足够数据的地方。如果您可以获得不同补丁的不同数据,那就更好了。 LR方法可为特定英雄被压倒的补丁提供不错的准确性,尤其是在数据量较小的情况下,如果您在英雄实际变化的情况下处理补丁,则可能会有点麻烦。

我的第三个建议是将模型更改为更适合您的功能之间的模型相互依赖性的模型。随机森林模型是一种非常简单,直接的方法,对于像这样的问题,应该比直接LR提供更好的性能,并且在sklearn中具有内置功能。

如果您想更进一步,那么使用MLP风格的网络模型可能会相对有效。我没有看到使用现代网络模型(CNN和RNN)来解决问题的明显框架,因此,除非您稍稍更改问题的定义,否则我认为这将是麻烦的多于其价值。

总是有疑问时会获取更多数据,并且不要忘记人们在这个问题上也非常非常糟糕。

07-24 09:52
查看更多