竞赛专题 | 挖掘模型哪家强,自动调参 VS 祖传参数?

点击上方“Datawhale”,选择“星标”公众号

第一时间获取价值内容

为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力。DataFountain 和 Datawhale 联合邀请了数据挖掘,CV,NLP领域多位竞赛大咖,将从赛题理解、数据探索、数据预处理、特征工程、模型建立与参数调优、模型融合六个方面完整解析数据竞赛知识体系,帮助竞赛选手从0到1入门和进阶竞赛。

下面是大咖分享

????????????

数据挖掘方向

杰少 ID:尘沙杰少

简介:南京大学计算机系毕业,现任趋势科技资深算法工程师。20多次获得国内外数据竞赛奖项,包括KDD2019以及NIPS18 AutoML等。

模型建立

目前常规的表格数据常常采用的模型还是以树模型为主,核心的几个模型是CatboostXGBoostLightGBM。因为目前Catboost和XGBoost都有gpu版本的,所以数据集比较大的时候也基本都可以跑起来,速度也都不是非常大的问题,如果碰到传统的表格型数据集,我非常建议大家都实现一下。

有些特定的表格数据问题,例如推荐问题中的DeepFFM,NFFM等;时间序列里面的LSTM,DCNN等都可以尝试一下;图像和文本类的问题目前主流是各种NN模型了,具体的可以看其他嘉宾的分享。

参数的调优

如果数据集相对较大,我一般会用贝叶斯优化包进行调参(主要调树的深度之类的重要参数),同时也会跑一些经验参数(例如我常选择subsample=0.8, 树的深度为6之类的),然后比较二者之间的线下结果的差距,如果差得不大,就选用贝叶斯方法得到的参数;如果经验参数效果更好,那么我就会选择经验参数。贝叶斯调参在很多时候效果还不如经验参数,大家可以比较一下。目前有非常多的自动化调参工具,大家都可以尝试一下,不过我个人更加倾向于前期固定一个参数验证各种想法,方便比较。后期再用几种相差不大的参数进行结果的融合提交。

如果数据集相对中等或者较小的话,我个人建议用多个参数融合,这样结果会更稳定一些,可以先用贝叶斯优化包跑出一个参数,然后在参数附近取几个不同参数(例如将深度从5改成6)跑几个结果融合一下;小的数据集AB榜波动会比较大,kaggle很多老的比赛中前排的选手也都建议多跑几个模型,用融合的方案来缓解波动大的问题。

王贺 ID:鱼遇雨欲语与余

简介:武汉大学硕士,2019年腾讯广告算法大赛冠军选手,京东算法工程师,一年内获得两冠四亚一季的佳绩。

模型方面比较传统,上图给出了常用的模型,也是必须要掌握的。

下面讲讲调参的细节,简言之调参的目的是偏差和方差的协调。因为偏差和方差影响这准确度。

对于树模型,参数基本上可以分为两类:

1. 训练过程中影响的类

2. 子模型影响的类

在子模型不变的前提下,某些参数可以通过改变训练的过程,从而影响模型的性能,例如:“子模型数”(n_estimators,即每次回生成一棵树)、“学习率”(learning_rate)等。另外,我们还可以通过改变子模型性能来影响整体模型的性能,诸如:“最大树深度”(max_depth)等。正由于bagging的训练过程旨在降低方差,而boosting的训练过程旨在降低偏差,过程影响类的参数能够引起整体模型性能的大幅度变化。一般来说,在此前提下,我们继续微调子模型影响类的参数,从而进一步提高模型的性能。

推荐学习:

https://www.zhihu.com/question/34470160/answer/114305935

王茂霖 ID:ML67

简介:华中科技大学研究生,DCIC-2019风电赛Top2选手。

模型建立

针对于模型建立的部分,现在大多数传统的机器学习比赛所用到的回归和分类模型就是xgboost、lightgbm和catboost了,相对来说lightgbm相对于xgboost更快,但多数情况下xgboost的效果要相对于lightgbm一点。但很多时候可以尝试两者模型的融合或者多模型得分近似但结果差异较大的结果融合。然后另外一方面,在有些匿名而且特征维度很多,样本数相对较少的情况下,一些基本的模型有可能可以取得更为有效的结果(在之前比赛遇到过),所以针对于模型这块,我所能给的建议就是可以多尝试不同模型,毕竟不同模型做出来了,后期还可以做模型融合,然后多去思考一些模型本身的特性和优劣势。

参数调优

参数调优这块,很多我觉得靠数据或者是经验吧,比如树模型的深度控制,或者叶子节点的数量控制,特别是对于xgboost这些集成模型来说,控制参数是较多的,有时需要多尝试,而尝试调节的基础是本地要构建一个很好的本地验证集,能够对于不同参数的情况有很好的反馈。参数的自动搜索是我大概不太推荐的,耗时,而且比较低效,推荐人工自己手调。

谢嘉元 ID:谢嘉嘉

简介:华南理工大学博士,多次数据挖掘竞赛中获得优异成绩。

我们在进行特征工程和模型选择之后,便需要进行参数调优,它能够将我们的模型达到最优的结果,往往找到了“天选参数”能够帮助我们获得优异的成绩。在机器学习中,主要有两类参数:第一类是通过训练数据学习得到的参数,(逻辑回归中的回归系数,这类是需要训练得到的);第二类是算法中需要进行优化的调优参数(超参),逻辑回归中的正则化系数C,决策树中的深度系数等等。我们需要去设置这类参数,为了找到最优的参数,我们可以利用网格搜索的方法,通过组合的方式搜索的方法寻找最优的超参值的组合。

CV方向

徐光福 ID:天灵灵地灵灵

简介:多次目标检测比赛第一、2018之江杯VQA比赛第二。

刚刚参加完一个瑕疵检测比赛,所以回答的晚了一些。下面以mmdetection为框架讲一下目标检测中的模型建立与参数调优。对于比赛来说,如果不是对速度有特别的要求,一般还是选用以faster rcnn为基础的双阶段模型,当然现在某些anchor free的单阶段模型也很强悍,说不定在不远的将来能够取代anchor base的模型也未可知。

回到现在,2019年10月,还是优先选择faster rcnn为基础的模型吧,说起来faster rcnn的baseline并不是很高,现在很多anchor free的模型在相同的backbone下已经超过了faster rcnn,但faster rcnn的优势在于,经过这些年大家不断的改进优化,可选项非常的多,各种可选项优化加上之后,faster rcnn仍然是得分之王。

基于faster rcnn的改进实在太多了,单是mmdetection中实现的方法和改进就能列出很长的一串,在相关的论文里,每个改进和优化都可以提高coco mAP若干点云云,但实际上,选择使用哪些改进和优化却是一个难题,因为很多改进和优化在一个很低baseline上会非常有效,但当你的模型已经加了很多改进和优化选项的时候,再添加某个改进,可能就会起不到作用甚至起到反作用了。

那下面说说那些比较重要的改进和优化,先说一个比较重要的结论——cascade+大backbone+dcn是王道

重要的事值得说三遍cascade+大backbone+dcn是王道,cascade+大backbone+dcn是王道,cascade+大backbone+dcn是王道。

虽然不一定是100%正确,但80-90%是跑不了的,说完这个再说别的感觉有点鸡肋,模型建立就不多说了,至于参数调优方面,说几个比较基础也比较重要的:anchor base的方法,调整anchor的大小和形状自然是少不了的,以泰达杯交通标志识别比赛为例,因为交通标志形状比较固定,所以anchor只保留一个正方行,也就是anchor_ratios=[1]也能取得很好的效果,如果目标形状变化非常大,那就要对也就是anchor_ratios做相应的调整。

根据比赛对iou的要求不同,可以调整pos_iou_thr这个参数,如果iou要求的比较高,可以相应的调高这个参数,如果iou要求很低,就可以调低这个参数,另外和iou相关的还有一些参数,也需要根据情况进行调节,lr的调整比较基础,就不详细说了。

最后说说bn、gn、syncbn的选择,这个也算在参数里面吧,对于目标检测来说,每卡的batch size不会很大,所以如果有多卡的话,优先选用syncbn吧,如果卡不够多,用了syncbn后,batch size还是很小,可以考虑一下gn,这样即使每卡只放一张图,训练也能取得不错的效果,缺点是预训练模型较少,速度也稍慢;如果你只有单卡,那就只能在bn和gn里面选了。

王博 ID:000wangbo

简介:西安电子科技大学研究生,一个不断在CV道路上探索的小白。

模型建立

针对于模型建立的部分,现在大多数传统的机器学习比赛所用到的回归和分类模型就是xgboost、lightgbm和catboost了,catboost对于拥有大量category features的数据较为友好。深度学习比赛我一般会先采用小网络产出一个baseline,再不断修改其中数据增强、Loss Function以及lr_scheduler。在达到一个比较好的成绩的时候,尝试一些不同的网络(比如efficientnet、SENet、inceptionv4等等),最终将所有模型融合即可。

参数调优

参数调优这块,要切合赛题紧贴数据。优化器我反正我无脑用sgd + momentum;如果显卡足够,可以每个模型跑个五折。深度学习就像炼丹,运气也是很重要的!参数调优一定要佛系,有时候和前排的差距并不是单单在参数调优上面。

NLP方向

张浩 ID:reborn_ZH

简介:CCF2018供应链需求预测亚军、2019搜狐内容识别算法大赛季军。

当前,在做自然语言处理相关任务的时候我们首先会想到预训练模型,比如bert、xlnet、ERNIE等等,在实际操作的时候往往直接在预训练模型后面接相关的输出层即可,比如做一个文本二分类任务,在bert后面加一个dense(2)就可以了,又比如做序列标注任务,在bert后面加一个CRF层就行了,当然在训练的时候记得fine-tuning,微调参数。至于参数调优问题,预训练模型主要是调整maxlen、lr、epoch、batch_size、优化器等等,当然对于具体的问题可能还有其他个别参数需要仔细调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值