如何真正从0到1打一场数据挖掘赛事《进阶版》
经过上一篇的入门学习,大家已经熟悉如何去打一场比赛,并能训练经典的机器学习算法模型,去解决实际的问题。如果你还不了解,可以先学习如何真正从0到1打一场数据挖掘赛事《入门版》,然后再进行本节的学习。
这个比赛是一个医疗领域的数据挖掘实践,赛事的任务是构建一种模型,该模型能够根据患者的测试数据来预测这个患者是否患有糖尿病。这种类型的任务是典型的二分类问题(患有糖尿病 / 不患有糖尿病)。本文将以任务学习和启发性思考的方式,帮助大家深入学习。

赛事背景:
本次比赛是一个医疗领域数据挖掘赛,需要选手通过训练集数据构建模型,对验证集数据进行预测,并将预测的结果提交到科大讯飞数据竞赛平台中,得到排名反馈。
报名地址:
https://challenge.xfyun.cn/topic/info?type=diabetes&ch=ds22-dw-zmt01
教程说明:
本教程共有6个任务,任务难度逐渐增加。每个任务中分为不同的模块,具体要求如下:
主线任务需要学习者独立完成
支线任务为学有余力的同学独立完成
思考为学习者提供了可以思考的方向,可通过讨论或搜索获得结果

任务1:比赛报名与环境配置
主线任务:
访问糖尿病遗传风险检测挑战赛网页,并注册相关账号
点击页面中赛事概要,了解比赛的赛事背景、赛事任务、提交说明、评估指标等相关信息
安装并配置好python的编程环境
思考:
为什么要了解比赛的相关信息?
比赛的评估指标有哪几种?本次比赛中为什么使用F1-score,相比其他评估指标有什么优势?
任务2:数据的读取与数据类型
主线任务:
解压比赛数据,使用pandas读取比赛数据,并查看训练集和测试集数据大小
查看训练集和测试集的数据类型
思考:
为什么要查看训练集和测试集的大小?
为什么查看训练集和测试集的数据类型?
参考代码:
任务3:数据的分析与探索
主线任务:
查看训练集和测试集的缺失值,并比训练集和测试集的缺失值分布是否一致
使用.corr()函数查看数据间的相关性
对训练集和测试集数据进行可视化统计
思考:
数据中的缺失值产生的原因?
怎么查看数据间的相关性?如果相关性高说明了什么?
参考代码:
任务4:数据的特征工程
主线任务:
将数据中的糖尿病家族史中的文本数据进行编码
将数据中的舒张压的缺失值进行填充
将出生年份的数据转换成年龄数据并进行分组
对体重和舒张压的数据进行分组
删除数据中的编号这一列
支线任务:
计算每个个体口服耐糖量测试、胰岛素释放实验、舒张压这三个指标对糖尿病家族史进行分组求平均值后的差值
计算每个个体口服耐糖量测试、胰岛素释放实验、舒张压这三个指标对年龄进行分组求平均值后的差值
思考:
文本数据为什么要进行编码?有没有其他的处理方法?除了编码为连续数字,有没有其他形式?
为什么要填充缺失值?你觉得参考代码中将所有的缺失值全部填充为0是否正确?
为什么要将出生年份转换成年龄?为什么要对年龄分组?
为什么对体重和舒张压进行了分组?这么做是否正确?
为什么要删除编号这一列?
参考代码:
任务5:模型的构建与优化
主线任务:
构建用于模型训练的训练集、训练标签以及测试集
从以下4个不同模型中选择1个完成模型构建,并提交分数
思考:
能够用于二分类的机器学习算法有哪些?
在逻辑回归代码中,为什么要进行数据标准化?
本次比赛中逻辑回归算法有较差的分数可能有哪些原因?
参考代码:
任务6:模型构建的进阶:
主线任务:
使用不同模型来评估预测准确性
对3个预测准确度最高的模型参数的搜索,并比较不同模型的预测准确性
思考:
模型融合的优点在哪里?
运行主线任务1,思考这些算法为什么要较高的准确度?
为什么可以通过搜索来调整模型的参数?模型参数的调整一定会让预测更准确嘛?
你觉得参考代码中搜索的参数设置合理嘛?如果不合理应该如何改进?
参考代码:
作者寄语
行文至此,数据挖掘比赛项目就告一段落了,经过这2次教程的学习,你应该体验到了数据挖掘比赛从报名到模型构建到优化的全过程,这将是你打开数据科学/算法工程/数据分析的第一步。正所谓“路漫漫其修远兮,吾将上下而求索”,这一步终究只是开始,在距离你的成为AI大师还有漫长的路要探索,但这也是一个美好的开始。正所谓“千里之行,始于足下”,相信这个简短的数据挖掘比赛教程将打开你数据挖掘的大门,若干年后,你将还会记得当初那个跟着教程不断尝试的自己。也期待成长后你加入幕后的贡献者团队,我们将一起坚持初心,帮助更多学习者成长。

点赞过100,更新《NLP竞赛入门》

