目录
3.2 MAE(Mean Absolute Error)介绍
1.项目背景
绝地求生(Player unknown’s Battlegrounds),俗称吃鸡,是一款战术竞技型射击类沙盒游戏。
这款游戏是一款大逃杀类型的游戏,每一局游戏将有最多100名玩家参与,他们将被投放在绝地岛(battlegrounds)上,在游戏的开始时所有人都一无所有。玩家需要在岛上收集各种资源,在不断缩小的安全区域内对抗其他玩家,让自己生存到最后。
该游戏拥有很高的自由度,玩家可以体验飞机跳伞、开越野车、丛林射击、抢夺战利品等玩法,小心四周埋伏的敌人,尽可能成为最后1个存活的人。
该游戏中,玩家需要在游戏地图上收集各种资源,并在不断缩小的安全区域内对抗其他玩家,让自己生存到最后。
2.数据集介绍
train_V2.csv - 训练集
test_V2.csv - 测试集
数据集局部图如下图所示:
数据集中字段解释:
3. 项目评估方式
3.1 评估方式
你必须创建一个模型,根据他们的最终统计数据预测玩家的排名,从1(第一名)到0(最后一名)。
最后结果通过平均绝对误差(MAE)进行评估,即通过预测的winPlacePerc和真实的winPlacePerc之间的平均绝对误差
3.2 MAE(Mean Absolute Error)介绍
4.代码实现
在接下来的分析中,我们将分析数据集,检测异常值。
然后我们通过随机森林模型对其训练,并对对该模型进行了优化。
# 导入数据基本处理阶段需要用到的api
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
4.1 获取数据、基本数据信息查看
导入数据,且查看数据的基本信息
可以看到数据一共有4446966条,
4.2 数据基本处理
4.2.1 数据缺失值处理
查看目标值,我们发现有一条样本,比较特殊,其“winplaceperc”的值为NaN,也就是目标值是缺失值,
因为只有一个玩家是这样,直接进行删除处理。
4.2.2 特征数据规范化处理
4.2.2.1 查看每场比赛参加的人数
处理完缺失值之后,我们看一下每场参加的人数会有多少呢,是每次都会匹配100个人,才开始游戏吗?
通过观察,发现一局游戏少于75个玩家,就开始的还是比较少
同时大部分游戏都是在接近100人的时候才开始
限制每局开始人数大于等于75,再进行绘制。
猜想:把这些数据在后期加入数据处理,应该会得到的结果更加准确一些
4.2.2.2 规范化输出部分数据
现在我们统计了“每局玩家数量”,那么我们就可以通过“每局玩家数量”来进一步考证其它特征,同时对其规范化设置
试想:一局只有70个玩家的杀敌数,和一局有100个玩家的杀敌数,应该是不可以同时比较的
可以考虑的特征值包括:
1.kills(杀敌数)
2.damageDealt(总伤害)
3.maxPlace(本局最差名次)
4.matchDuration(比赛时长)
4.2.3 部分变量合成
此处我们把特征:heals(使用治疗药品数量)和boosts(能量、道具使用数量)合并成一个新的变量,命名:”healsandboosts“, 这是一个探索性过程,最后结果不一定有用,如果没有实际用处,最后再把它删除。
4.2.4 异常值处理
4.2.4.1 异常值处理:删除有击杀,但是完全没有移动的玩家
异常数据处理:
一些行中的数据统计出来的结果非常反常规,那么这些玩家肯定有问题,为了训练模型的准确性,我们会把这些异常数据剔除
通过以下操作,识别出玩家在游戏中有击杀数,但是全局没有移动;
这类型玩家肯定是存在异常情况(挂**),我们把这些玩家删除。
4.2.4.2 异常值处理:删除驾车杀敌数异常的数据
4.2.4.3 异常值处理:删除玩家在一局中杀敌数超过30人的数据
4.2.4.4 异常值处理:删除爆头率异常数据
如果一个玩家的击杀爆头率过高,也说明其有问题。
4.2.4.5 异常值处理:删除最远杀敌距离异常数据
4.2.4.6 异常值处理:删除关于运动距离的异常值
a)行走距离处理
b)载具行驶距离处理
c)游泳距离处理
4.2.4.7 异常值处理:武器收集异常值处理
4.2.4.8 异常值处理:删除使用治疗药品数量异常值
4.2.5 类别型数据处理
4.2.5.1 比赛类型one-hot处理
4.2.5.2 对groupId,matchId等数据进行处理
关于groupId,matchId这类型数据,也是类别型数据。但是它们的数据量特别多,如果你使用one-hot编码,无异于自杀。
在这儿我们把它们变成用数字统计的类别型数据依旧不影响我们正常使用。
4.2.6 数据截取
4.2.6.1 取部分数据进行使用(1000000)
4.2.7 确定特征值和目标值
4.2.8 分割训练集和测试集
4.3 机器学习(模型训练)和评估
# 导入需要训练和评估api
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
4.3.1 使用随机森林对模型进行训练
经过第一次计算,得出准确率为:0.92, mae=0.061
4.3.1.2 再次使用随机森林,进行模型训练
减少特征值,提高模型训练效率。
4.3.2 使用lightGBM对模型进行训练
4.3.2.1 模型初次尝试
4.3.2.2 模型二次调优
4.3.2.3 模型三次调优[思路]
其他参数可以依次如上调优。