Kaggle知识点
在我们之前的分享中我们大多以具体的竞赛案例,如某个竞赛的Top解决方案来讲解具体的比赛。那么是不是有更好的学习方法呢?答案是肯定有,大部分Kaggle赛题都是相通或者类似的,还有一些通用的问题。
问题1:赛题是哪一种类型?
首先参加Kaggle竞赛,你需要知道有哪些具体的比赛类型。具体分类如下图所示,当然有多种分类方法。
最为主要的类型区别有:
赛题的提交方式(提交结果、Kernel)
赛题问题类型(CV、NLP或结构化)
问题2:赛题问题是什么?
在确定好赛题类型后,你应该仔细阅读赛题的Overview界面弄清楚的赛题的具体问题。当然赛题描述不会很明确的说出赛题具体问题,需要选手自行进行分辨。
在回答问题2时,需要弄清楚:
赛题是CV、NLP还是结构化中的哪一种?
赛题对应于学术问题的中哪一种?
赛题我之前见过吗?有代码或知识的积累?
Kaggle有类似赛题任务吗,有选手分享吗?
问题3:赛题数据如何建模?
在弄清楚赛题类型和具体的问题后,需要弄清楚赛题问题的建模方式,这一点就涉及到具体的建模的方法和模型了。当然也并不是所有的赛题都是新任务,Kaggler只需要熟知历史任务,并进行举一反三就可以了。在问题3你应该弄清楚:
问题有不同的建模方式,哪一种更加适合?
问题建模应该使用哪一个模型?
问题模型如何迭代,如何优化?
问题4:赛题数据的细节理解?
在了解了赛题的初步的任务和建模方法后,接下来就要深入到细节中了。你应该深入理解赛题数据的字段含义、字段产生方式和标签的产生方式。
对于结构化数据的每个字段:
字段的类型、含义是什么
字段与标签有什么关系?
在回答问题4时,可以从描述性数据分析和探索性数据分析两个角度来完成。赛题的理解决定了赛题的具体建模方式,是尤为关键的一点。
问题5:赛题使用什么模型?
问题5与问题3有点类似,但在问题5你应该回答的更加具体,
赛题具体使用到的模型是什么?
模型有哪些超参数可供选择?
有类似模型可以对比参考吗?
在回答问题5时,需要根据问题4的答案来进行接解决。首先根据赛题具体的数据类型,可以将赛题分为结构化赛题和非机构化赛题。同时在回答问题5时,你应该跑通或者写完baseline了。
问题6:模型处于那种阶段?
机器学习模型根据状态可以分为欠拟合和过拟合,当然你应该追求模型对测试集最好拟合的状态。也就是说,你应该知道模型此时的状态。
如果模型是欠拟合你应该做什么?
如果模型是过拟合你应该做什么?
问题7:赛题上分点是什么?
当你回答完前面6个问题后,基本上你已经提交过一次答案,已经成功上榜了。但是这些还不够,与前排选手相比你的模型精度还有待优化。
因此你需要弄清楚:
前排选手与自己的精度差异在哪儿?
自己还能从哪些地方上分?
回答问题7最好的方法是阅读比赛论坛和相关论文,当然这些问题的具体答案只能自己回答自己了。从问题7开始,你开始真正的竞赛探索过程。
问题8:本地CV与线上得分?
在模型训练的过程中,本地验证集CV的得分非常重要。同时本地CV与线上得分的差异性也至关重要,也就是CV vs 线上(PB)。在Kaggle每个比赛中,经常会有人对比自己CV与线上得分的差异性(gap)。这样对比的作用是:
寻找更好的本地CV得分;
寻找更加问题的gap;
通过问题8,你将会对赛题线上线下有初步的感知,这将会影响你的最终得分。当然分布需要细心观察,反复试验得到的。
问题9:赛题如何完成集成?
在不断回答自己问题的同时,你还需要考虑模型最终的集成问题。模型集成在有些Kaggle竞赛中非常重要,会带来精度增益。
但是模型集成是需要得分差异性,需要训练多个模型的:
如何完成stacking和简单的KFlod平均?
深度学习模型如何完成模型集成?
问题10:赛题如何完成总结?
最后的最后,在比赛完结后不管结果如何。希望你在阅读和反思比赛的历程后回答自己这些问题:
通过本次比赛我学习到什么?
我与前排选手差异在哪儿?
遇到下次类似比赛,我将如何行动?
参加比赛还是很耗费资源和时间,无论大家结果如何,希望大家都有所收获。希望大家都不要翻车~