该课程是安徽工程大学数据科学与大数据技术大一下修的课程,要求完成百度飞桨或阿里云上面的数据科学竞赛并拟写报告和答辩。
我的成绩是优秀,以下格式仅供参考。
目录
该课程是安徽工程大学数据科学与大数据技术大一下修的课程,要求完成百度飞桨或阿里云上面的数据科学竞赛并拟写报告和答辩。
3.2 查看其中列的最大值(有用的可分析的,像 player_name之类的可以不用分析,游戏不会因为名字长短获得胜利。)
1 赛题背景
《绝地求生》(PUBG) 是一款国内外很火的战术竞技型射击类沙盒游戏。在游戏中,玩家需要在游戏地图上收集各种资源,并在不断缩小的安全区域内对抗其他玩家,让自己生存到最后。 主办方提供了PUBG游戏数据中玩家的行为数据,要求我们能够通过每位玩家的统计信息、队友统计信息、本局其他玩家的统计信息等,预测玩家最终的游戏排名。通过查找相关文献,文献[1]综合运用时间序列指数平滑法、一元线性回归和层次分析法等数据挖掘方法,预测第32届奥运会奖牌榜排名。文献[2]针对学生成绩排名预测的问题,采用多元线性回归对 某初中初一学生月考成绩进行回归分析,得到的关于成绩排名的回归模型,能够有效的对学生的排名进行预测。文献[3]利用校园一卡通数据,结合可视化相关技术,设计一卡通数据可视化模型,有效地发现学生在校园中的行为规律和异 常情况。此外,利用可视化交互方式,将学生的行为和成绩联系起来,探索引起学生成绩变化的因素,并通过多元线 性回归对学生成绩排名进行预测,其相关性达到了 90%以上,证明可视化效果的有效性。了解到本赛题是一个典型的回归问题,需要建立线性回归模型进行排名的预测。
综上所述,对该问题采用多元线性回归的方法,来预测吃鸡比赛的排名。
2 赛题数据
2.1数据简介
赛题训练集案例如下: 训练集5万数据,共150w行测试集共5000条数据,共50w行赛题数据文件总大小150MB,数据均为csv格式,列使用逗号分割。
表1:吃鸡比赛排名预测数据集
测试集中label字段team_placement为空,需要选手预测。完整的数据字段含义如下:
match_id:本局游戏的id
team_id:本局游戏中队伍id,表示在每局游戏中队伍信息
game_size:本局队伍数量
party_size:本局游戏中队伍人数
player_assists:玩家助攻数
player_dbno:玩家击倒数
player_dist_ride:玩家车辆行驶距离
player_dist_walk:玩家步行距离
player_dmg:输出伤害值
player_kills:玩家击杀数
player_name:玩家名称,在训练集和测试集中全局唯一
kill_distance_x_min:击杀另一位选手时最小的x坐标间隔
kill_distance_x_max:击杀另一位选手时最大的x坐标间隔
kill_distance_y_min:击杀另一位选手时最小的y坐标间隔
kill_distance_y_max:击杀另一位选手时最大的x坐标间隔
team_placement:队伍排名
3 数据探索性分析
3.1 检查列中是否存在缺失值
missing_values = train_df.isna()
统计每列缺失值的个数:
num_missing = train_df.isna().sum()
图 1-1 缺失值分析
缺失值严重缺失的:match_id team_id game_size party_size player_assists player_dbno player_dist_ride player_dist_walk player_dmg
player_kills player_name 。这些数据可以抛弃。
图 1-2 数据剖析
3.2 查看其中列的最大值(有用的可分析的,像 player_name之类的可以不用分析,游戏不会因为名字长短获得胜利。)
kill_distance_x_min:击杀另一位选手时最小的x坐标间隔
kill_distance_x_max:击杀另一位选手时最大的x坐标间隔
kill_distance_y_min:击杀另一位选手时最小的y坐标间隔
kill_distance_y_max:击杀另一位选手时最大的x坐标间隔
是可用分析数据,其最大值为
图 1-3 最大值
变量相关性分析(散点图、相关图)
3.3 将数据可视化进行数据分析
sns.heatmap(train_df.corr())
采用热点图观察数据波动变化,特征和特征之间存在一定的相关性,采用热力图采用颜色的深浅、点的疏密以及呈现比重的形式,可以清晰地观察特征和特征之间的相关程度。
图 1-4 数据关联热力图
4 数据预处理
4.1 数据缺失值处理
本次竞赛代码运用的是最常用的一种填充缺失值方法,用pandas中的fillna()指定填充指定列或者整个数据集。
先检查每个列中是否存在缺失值,返回一个包含 True 和 False 的 DataFrame,然后统计每个列中缺失值的数量,最后统计整个 DataFrame 中缺失值的数量。检查结果发现训练数据集中kill_distance_x_min、kill_distance_x_max、kill_distance_y_min、kill_distance_y_max四列的缺失值太多,检查结果如下图:
图 2-1 检查数据
图 2-2 数据缺失
为避免训练出错,填充nan值。
再次查看测试集数据缺失值,检查结果如下图:
图 2-3 检查测试集数据
图 2-4 缺失值过多
发现训练数据集中的缺失值还是很多,为了避免训练出错,继续填充nan值。
4.2 构建新的特征
在机器学习中,数据和特征决定了上限,特征越好,灵活性越强,构建的模型越简单,模型的性能也越出色。
本代码构建新的特征,包括最大死亡距离和最小丝杠距离的差值、死亡距离半径,并将新特征合并到原数据集中。具体来说,代码首先使用 Pandas 库的 sqrt() 函数计算了两个新特征 kill_distance_min 和 kill_distance_max,分别对应着最小死亡距离和最大死亡距离的欧式距离。然后将最小死亡距离和最大死亡距离的差值作为一个新的特征 kill_distance_minmax。接下来计算了一个新的特征 player_dist_all,表示玩家总移动距离。最后,使用 Pandas 的 reindex() 方法将新特征加入到原数据集中,并重新排列列的顺序。(具体代码见附录)
在测试集上也执行了相同的特征工程(除了目标变量 team_placement)。
4.3 归一化
归一化就是将需要的数据经过处理后限制在所需要的一定范围内。其是为了后面数据处理的方便,并保证程序运行时收敛加快。
本代码对标签和数据归一化。(具体代码见附录)
最后输出训练集 train_df 和测试集 test_df 的行和列数,以元组的形式返回。
5 模型构建
5.1 模型选择
5.1.1 基线模型
模型分析;
该模型是一个包含三个全连接层的简单的神经网络模型,输入大小为13,输出大小为1。其中各层的节点数依次为40、20和1。激活函数使用了ReLU,没有加入Dropout等防止过拟合的方法。
优点:
(1)模型结构简单,参数较少,容易训练和优化。
(2)适用于小型数据集,适合快速迭代模型并快速验证模型的效果。
(3)使用了ReLU激活函数,能够有效避免梯度消失问题,并且计算速度比较快。
缺点:
(1)模型复杂度较低,可能会有欠拟合的情况出现,需要调整模型结构或增加正则化等手段来解决。
(2)模型没有加入防止过拟合的方法,可能会出现过拟合的情况,需要增加正则化或者Dropout等手段来缓解。
(3)模型对于大规模数据集的效果较差,可能出现欠拟合的情况,需要加深网络结构或者使用更复杂的模型来提高拟合能力。
5.1.2 优化模型一
模型分析:
该模型是一个包含多层全连接层的深度神经网络模型,输入大小为13,输出大小为1。各层的节点数都设置为了100,其中输出层节点数设置为20。激活函数使用了ReLU,并且在输出层也使用了ReLU,加入了防止过拟合的方法
优点:
(1)模型具有较强的拟合能力,适合处理一些较为复杂的问题。
(2)使用了深度结构,可以提高模型的表达能力和学习能力,从而更好地拟合数据。
(3)输出层也使用了ReLU激活函数,并且没有出现过拟合的问题。
缺点:
(1)模型结构较为复杂,参数数量较多,训练和优化难度较大。
(2)深度结构容易出现梯度消失或梯度爆炸的问题,需要使用特殊的初始化方法或正则化等手段来解决。
(3)因为模型较为复杂,可能会出现过拟合的情况,需要采用Dropout、正则化或其他防止过拟合的方法来缓解。
5.1.3 优化模型二
模型分析:
该模型是一个包含多层全连接层的深度神经网络模型,输入大小为13,输出大小为1。各层的节点数分别是128、64、32和1。激活函数使用了PReLU,并且在每一层后都使用了20%的Dropout层来防止过拟合。
优点:
(1)模型结构相对简单,同时也避免了梯度消失或梯度爆炸的问题,训练和优化较为容易。
(2)使用了PReLU激活函数和Dropout层,可以有效地缓解过拟合问题,提高模型的泛化能力。
(3)在损失函数上加入了L2正则化项,可以进一步降低过拟合风险。
缺点:
(1)模型的层数较少,可能难以处理一些复杂的问题。
(2)节点数较少,可能会导致模型的表达能力有一定的限制。
(3)只使用了一个损失函数,可能无法充分考虑数据的特点,如可以通过尝试其他损失函数进一步提高模型的性能。
5.1.4 确定模型
根据实际运行结果和效率来看最终选择了优化模型二(模型二代码见附录)
5.2 模型训练
5.2.1模型训练基线代码
代码分析:
这段代码是一个简单的基于PaddlePaddle的线性回归模型,它的优缺点如下:
优点:
(1) 代码结构清晰,易于理解。
(2)使用了飞桨动态图的特性,方便用户进行快速试错和调试。
(3)计算损失和梯度下降等过程已经封装在了PaddlePaddle的内部实现中,用户只需定义网络结构即可。
缺点:
(1)代码中只使用了L1损失函数,没有体现出适合问题特点的损失函数可能会对性能造成影响。
(2)代码中缺少学习率和其他优化器的超参数设置,这会影响模型训练效率和性能。
(3)代码只用了独立同分布(i.i.d)的数据集,没有考虑到时间序列相关的数据集。如果需要处理时间序列相关数据集,需要将数据进行合理划分才能更好利用历史数据来预测未来趋势。
5.2.2 优化模型训练代码
代码分析:
优点:
(1)代码结构清晰、注释详细,易于理解和修改。
(2)对超参数设置进行了调整和注释,方便用户进行快速试错和调参。
(3)使用了L1损失函数,适合预测问题中存在离群点的情况。
缺点:
(1)梯度下降方法使用了默认的SGD优化算法,没有对其他优化器进行尝试,可能存在更好的优化效果。
5.2.3 训练结果如图:
图 3-1 模型训练结果
5.3 模型优化
5.3.1 优化模型搭建
由于基线模型复杂度较低,可能会有欠拟合的情况出现,需要调整模型结构或增加正则化等手段来解决。而且模型没有加入防止过拟合的方法,可能会出现过拟合的情况,需要增加正则化或者Dropout等手段来缓解。另外,模型对于大规模数据集的效果较差,可能出现欠拟合的情况,需要加深网络结构或者使用更复杂的模型来提高拟合能力。
针对基线模型的问题,搭建了两个优化模型,根据实际运行结果和效率来看最终选择了优化模型二(模型二代码见附录)。
5.4 模型预测
5.4.1 测试集预测
对训练好的神经网络模型进行测试预测,首先将模型转换为评估模式,即禁用 Dropout 层等随机性的层,以确保在测试期间模型具有一致的行为,然后将测试集转换为 Tensor 格式,并将其输入到训练好的神经网络模型中,得到每个样本的预测值 test_predict。最后将 test_predict 转换为 Numpy 数组,并使用 flatten() 函数将多维数组降为一维,得到最终的测试集预测结果。
5.4.2 预测值反归一化
对PUBG游戏比赛场次中,测试集中的队伍排名(test_predict)进行反归一化处理,并计算出测试集中每个队伍的真实排名(team_placement)。首先读取PUBG游戏数据的训练集和测试集。然后删除训练集和测试集中的 match_id 和 team_id 列(即比赛ID和队伍ID),因为这些列对模型预测结果没有贡献,使用0填充训练集和测试集中的缺失值。然后将测试集数据复制一份为 test_df3,并将其 team_placement 列赋值为游戏场次数乘以归一化处理后的队伍排名(即 game_size * test_predict)。最后对 test_df3 进行反归一化处理,得到每个队伍在该场游戏中的真实排名。
5.4.3 对预测数据取整并保存
由于竞赛要求提交结果为csv文件的zip文件,所以将测试集的预测结果保存为CSV文件和zip文件。首先将 test_predict 转换为 Pandas 数据框格式,列名为 team_placement。然后使用 to_csv 函数将 Pandas 数据框写入 submission.csv 文件,并通过设置 index=None 参数来取消行索引写入,最后使用 zip 函数将生成的 submission.csv 文件压缩为 submission.zip 文件,以方便提交结果。
图 3-2 预测结果
5.4.4 保存模型
将训练好的神经网络模型在训练结束后保存下来,以便之后可以重新加载该模型并进行继续的训练或预测。首先定义一个函数 save_model,该函数有三个参数:model是要保存的模型,optimizer是模型对应的优化器,model_name是指定的模型名称。然后在 save_model 函数中,首先定义两个保存路径,一个用于保存模型参数,一个用于保存优化器信息和相关参数。然后使用 paddle.save 函数将模型参数保存到指定路径的文件中。最后使用 paddle.save 函数将优化器信息和相关参数保存到指定路径的文件中。
6 个人小结
6.1 吃鸡比赛排名预测个人小结-数据科学221魏永雷
在参加数据科学竞赛的过程中,我收获了很多知识和经验,也充分展现了自己的才智和实践能力。以下是我的个人小结:
6.1.1 学到了很多新知识
在数据科学竞赛中,我学到了很多新的知识和技能。比如,我学会了如何处理大规模的数据集,如何使用机器学习算法进行数据建模和预测等。同时,我还学会了如何用 Python 进行数据分析和数据可视化,以及如何利用 AI Studio等平台工具进行代码管理和版本控制。
6.1.2 提升了自己的实践能力
数据科学竞赛不仅考验了我理论知识的深度,更考察了我实践能力的水平。在比赛中,我不断尝试各种算法和模型,并根据实验结果进行调整和优化。通过这样的实践过程,我逐渐熟悉了机器学习的流程和方法,也明确了自己学习和提高的方向。
6.1.3 遇到了一些挑战和问题
在比赛中,我也遇到了一些挑战和问题。比如,有时候数据集过于庞大,需要用到一些分布式计算和高性能计算的工具。而这些工具对于我这样的初学者来说,可能需要更多的时间和耐心去学习和掌握。
同时,在比赛中,我也发现了我的一些短板和不足之处。比如,在数据清洗和特征工程等方面,我还需要加强自己的技能和实践经验。这些短板和不足之处也成为了我未来学习和提高的动力。
6.1.4 要加强团队协作能力
另外,在数据科学竞赛中,我也体验到了团队协作的重要性。在团队中,每个人都有自己的优势和特点,能够相互协作、相互促进,共同完成任务。通过与团队成员的交流和合作,我不仅学到了更多的知识和技能,还提高了自己的沟通和领导能力。
此外,比赛过程中我也认识到了数据科学的兴起对于行业发展所带来的影响,数据科学已成为推动产业及社会进步的核心驱动力之一。因此,在未来的学习和职业规划中,我将继续深入探索数据科学领域,并为其发展贡献自己的力量。
6.1.5 要善于总结和反思
另外,在数据科学竞赛中,我也发现了自己的一些优点和长处。比如,我具有较强的数学和编程能力,能够快速理解和掌握新的算法和模型;同时,我也拥有较好的逻辑思维和问题解决能力,能够从数据中找到规律和特点,有效分析和解决问题。这些优点和长处让我在比赛中有了一定的竞争优势,也为我的未来学习和职业发展奠定了良好的基础。
最后,通过参加数据科学竞赛,我也对自己的人生目标和价值观进行了思考和反思。我认识到,只有不断努力学习和探索,并且将所学应用于实践之中,才能不断提高自己的个人素质和技能,实现自己的人生价值和目标。我会在未来的学习和工作中保持这样的态度,坚持不懈地追求进步和改善。
6.1.6 要坚持学习和实践
总之,参加数据科学竞赛让我深刻意识到了数据科学的广阔前景和重要性。但是,要想在这个领域取得更好的成绩和表现,就需要不断坚持学习和实践,提高自己的知识水平和实践能力。我相信,只要保持热情和耐心,一定能够在数据科学的道路上越走越远。
6.2吃鸡比赛排名预测个人小结-数据科学221魏宏婷
在参加数据科学竞赛的过程中,收获了很多经验和知识 ,以下是我的个人小结:
6.2.1 学习到了很多新知识
在我负责的数据预处理部分中,学习到了许多新知识。例如数据预处理的步骤:数据清洗、数据抽取、数据转换、数据映射、数据标准化等。以及处理数据缺失值的方法,其中本代码运用的是最常用的一种填充缺失值方法,用pandas中的fillna()指定填充指定列或者整个数据集。也了解了一些特征工程中构建新的特征和归一化的相关知识。
6.2.2 遇到了一些困难和挑战
一开始我对数据科学竞赛是完全不了解的,不了解竞赛的过程步骤,缺乏相关理论知识,缺少参赛经验。在经过课程学习和自己在各个数据科学竞赛平台上摸索动手实践后,我逐渐感兴趣并报名参加了一些学习赛来熟悉竞赛流程。在完成大作业的前期,我们的小组也面临过分工不明等情况,但在成员们一起协商合作下,问题被逐一解决。
6.2.3 学会合作共赢
数据科学竞赛不可能只靠某一个人完成整个过程,每个人所擅长的领域不一样,有的人擅长编写代码,有的人擅长撰写文稿,有的人善于总结归纳。互相帮助,互相学习,互相进步,这才是团队合作的意义。与此同时,我们还要给予队友信任与肯定,只有这样我们才能在发挥自己优势的同时学习到新的知识与本领。
6.2.4 增强了动手能力
在参加此次数据科学竞赛之前,我很少会完整的完成一个赛题,这次的小组赛是一个很好的机会,去锻炼我各个方面的能力,提高综合素养。不进学习相关专业知识,还增进人际交往和与人沟通的能力,这是一个成长的过程。我也摆脱了只看不做,只听不练,真正自己动起手来参与实践,增强了动手能力。
6.2.5 学会总结不断学习
这次的数据科学竞赛小组模式让我学会了很多新知识,锻炼了自身的能力,同时也发现了自己的一些问题,希望自己在接下来的学习生活中,能以此次竞赛为契机,进一步深入学习,多动手实践,学好数据科学,为以后的考研以及工作之旅奠定基础。
6.3吃鸡比赛排名预测个人小结-数据科学222卞东强
6.3.1 汲取了新的知识
为了完成这次竞赛,我不停的的在网上查资料,在这个过程中,我不断地接触到新的知识,如paddle构建框架,基于Matplotlib的seaborn将数据转化为图片可视化,用热点图的颜色清晰的表示特征与特征之间的相关程度等等。
6.3.2 克服遇到的困难
当然这个过程不是一帆风顺的,总会遇到一些困难挫折,有的问题很快可以找出问题并及时的解决,但是还是会遇到一些卡脖子的问题,一些无法实现的技术,一些我无法理解的知识点,这个会困住我很长时间去了解它,去查资料,去问被别人,然后学会,掌握,最后运用到它。
6.3.3 懂得团结,学会团队合作
因为是团队合作,前期要一遍一遍的熟悉流程,有哪些步骤,需要做哪些,这个时候要对自己的能力和擅长的那一面,和自己哪一方面要有个数,对自己有一个清醒的认知,自己的水平怎么样,自己的长处在哪里,然后小组之间进行讨论分工,每个人要负责哪方面,把长处发挥最大化,不能因为个人情绪扰乱工作进度,一定要相信自己的队友,因为团队赛最需要的就是对队友的信任。多提问,多交流,众人拾柴火焰高,一块共同解决,一同寻找答案。
6.3,4学会总结经验,不在同一个地方绊倒
困难的地方很多,有时候还会一下子遇到相同的困难好几次,这个过程中我学会了总结归纳,遇到困难解决困难,再次遇到相同的问题,我能在极短的时间内用极简的方式解决,我觉得这就是我的收获,我的成功。
6.3.5自身的动手能力增强
初次动手做训练时多少有点生疏,总是忘这忘那的,有时候会钻牛角尖,这个问题用这种方法解决不了,就一直尝试用着中办法解决,不换个方向考虑,会耽误很长一段时间,这个竞赛的过程中,我极大的改正了这个毛病,学会避免钻牛角,并用极快的时间熟悉问题,采用其他方式解决。
7 团队小结
数据科学竞赛是一个很好的机会,让团队成员能够参与到数据科学实战中,挑战自己的技能和能力。在这场竞赛中,我们的团队参与了多个阶段,取得了一些成绩,现在来做一个小结。
首先,在团队中,我们非常注重团队协作,通过分工合作,充分利用每个成员的优势,最大化贡献了整个团队的效率和成果。同时,我们也注重技术学习和分享,通过经验的传递和交流,不断优化我们的算法和模型。
其次,我们在竞赛中取得了较为靠前的排名,但更重要的是我们在实践中学到了很多实际操作的经验,并对数据挖掘技术和算法进行了深入的理解和探索。我们发现,在数据科学中,不仅仅需要算法和技能,还需要对数据本身的理解和把控能力,同时也需要商业意识和风险控制能力。
除此之外,我们认为,数据科学竞赛是一个很好的锻炼机会,它不仅能够加强团队协作和技术能力,也可以帮助团队更好的理解数据本身和商业价值,同时也能够为个人创造更多的价值。我们希望在接下来的工作中,能够不断地深化我们的数据科学技能,探索更多的数据挖掘应用场景,并在竞赛中取得更好的成绩。
另外,在数据科学竞赛中,我们也遇到了一些挑战和问题。首先是数据集的质量和不完整性,需要通过数据清洗和预处理来提高数据质量。其次是算法创新和模型优化,需要不断探索新的算法和技术,同时也需要进行模型的调参和优化,以达到最佳效果。此外,还需要注重模型的可解释性和风险控制能力,以保证模型的可靠性和实用性。
此外,在数据科学竞赛中,我们还需要注重项目管理和沟通能力。在团队合作中,有效的 项目管理可以保证项目的顺利进行和进度控制。同时,通过良好的沟通和协调,可以协调各个成员之间的工作,并共同解决问题。
除此之外,我们也需要注重结果的可视化和解释能力。在竞赛中,优秀的数据可视化和结果解释可以帮助我们更好地理解模型的预测结果和相应的业务场景。通过清晰的图表和解释,我们能够更好地与各方分享我们的成果,也可以为日后的分析提供有价值的参考。
综上所述,在数据科学竞赛中,需要注重多方面的能力和技能,包括团队协作、技术创新、数据理解、商业思维、项目管理、沟通能力、结果可视化和解释能力等。只有不断锤炼和提升这些能力,我们才能在竞赛中获得更好的成绩,并为实际业务带来更多的价值。
8 参考文献
[1]戴钰璁,王清华.第32届奥运会奖牌榜排名预测[J].电脑知识与技术,2017,13(26):215-219.DOI:10.14004/j.cnki.ckt.2017.2796.
[2]张晓非,王玉雯,聂佳琦等.多元线性回归在分析学生成绩排名预测中的应用[J].福建电脑,2018,34(05):154+160.DOI:10.16707/j.cnki.fjpc.2018.05.082.
[3]邢窈窈,唐丽,郭磊.基于校园一卡通数据的成绩排名预测方法研究[J].中国教育信息化,2018,No.420(09):82-86.
9 附录
9.1项目源码链接及介绍:
https://aistudio.baidu.com/bj-cpu-01/user/2690215/6011027/lab/tree/%E5%90%83%E9%B8%A1%E6%8E%92%E5%90%8D%E9%A2%84%E6%B5%8B.ipynb
9.2 了解我们的课题
课题链接:
https://aistudio.baidu.com/aistudio/competition/detail/799/0/introduction
9.3 预测文件(95.1741分,5月榜二)
9.4 联系我们
QQ群:430312727
群聊二维码
9.5 团队成员探讨记录
上面文章的图片我没有插入,结合实际情况去用,答辩好好做,不出意外也是优秀。