讲一讲关于深度学习的比赛入门

讲一讲关于深度学习的比赛入门,这个问题,也算是自己在学的过程中 一直要做的事情了,

当然网上最普遍的比赛就是图像分类,这个东西还有很多,自然语言处理,其他(推荐系统时间序列频域分析)

竞赛项主要是:分类问题,其他(聚类,综合问题算法等),回归问题

,我感觉就是从出击来看就是调参,高级来说就是算法领域的问题

毕竟深度学习也是一门庞大的艺术领域研究问题,

下面还是将重点咯

1.你是否对一下代码熟悉?

最小二乘法,梯度下降,线性回归,感知机,人工神经网络,深度神经网络

这部分不是必须要掌握,但是代码起码得会写

来一个进阶的链接

https://blog.csdn.net/weixin_33806300/article/details/89829105

2. 了解数据竞赛平台

kaggle,AI ,paddle

语言不必介绍python

Kaggle的正规项目分为四类,
分别是:FeaturedResearchRecruitmentGetting Started

3.比赛的流程

基本是 数据分析、数据清洗、特征工程、模型训练、验证调参与优化 这样一些基本环节,下面再细说。

 

数据分析

对数据的分析和理解可以提升大家后续工作的效率,确定合适的方向,下面有一些点大家可以参考:

 分析特征变量的分布

  • 特征变量为连续值:如果为长尾分布并且考虑使用线性模型,可以对变量进行幂变换或者对数变换。
  • 特征变量为离散值:观察每个离散值的频率分布,对于频次较低的特征,可以考虑统一编码为“其他”类别。

 分析目标变量的分布

  • 目标变量为连续值:查看其值域范围是否较大,如果较大,可以考虑对其进行对数变换,并以变换后的值作为新的目标变量进行建模(在这种情况下,需要对预测结果进行逆变换),有一些其他的变换比如Box-Cox也可以尝试。
  • 目标变量为离散值:如果数据分布不平衡,考虑是否需要上采样/下采样;如果目标变量在某个ID上面分布不平衡,在划分本地训练集和验证集的时候,需要考虑分层采样(Stratified Sampling)。

分析变量之间两两的分布和相关度

  • 可以用于发现高相关和共线性的特征。 通过对数据进行探索性分析(甚至有些情况下需要肉眼观察样本),还可以有助于启发数据清洗和特征抽取,譬如缺失值和异常值的处理,文本数据是否需要进行拼写纠正等。

数据清洗

数据清洗是指对提供的原始数据进行一定的加工,排除异常值等,使得其方便后续的特征抽取。

  • 数据表的合并
    • 提供的数据分散在多个文件,需要根据相应的键值进行数据的合并拼接。
  • 特征缺失值的处理
    • 特征值为连续值:按不同的分布类型对缺失值进行补全:偏正态分布,使用均值代替,可以保持数据的均值;偏长尾分布,使用中值代替,避免受 outlier 的影响;
    • 特征值为离散值:使用众数等代替。
  • 异常值的处理
    • 对于在分布边缘很极端的一些样本,可以考虑直接剔除,防止拉偏模型

 

特征工程、

特征决定了效果的上限,而不同模型只是以不同的方式或不同的程度来逼近这个上限。这样来看,好的特征输入对于模型的效果至关重要,正所谓”Garbage in, garbage out”。毕竟,“特征做不好,调参调到老,效果还不好”。 特征工程是一个和场景还有数据极度相关的过程。因此可能没有一些固定的方法或者模式,要结合数据特性做相应的处理。下面列一些常见的通用操作。

特征变换

针对一些长尾分布的数据特征,可以做幂变换或者对数变换,使得模型(LR或者DNN)能更好的优化。当然,大家都知道的是,树模型(Random Forest、GBDT、xgboost等)模型对特征数值幅度不敏感。

特征编码

对于离散的类别特征,往往需要进行必要的特征转换/编码才能将其作为特征输入到模型中。常用的编码方式有 LabelEncoder,OneHotEncoder(sklearn里面的接口)。譬如对于”性别”这个特征(取值为男性和女性),使用这两种方式可以分别编码为{0,1}和{[1,0], [0,1]}。

对于取值较多(如几十万)的类别特征(ID特征),直接进行OneHotEncoder编码会导致特征矩阵非常巨大,影响模型效果。可以使用如下的方式进行处理:

  • 统计每个取值在样本中出现的频率,取 Top N 的取值进行 One-hot 编码,剩下的类别分到“其他“类目下,其中 N 需要根据模型效果进行调优;
  • 统计每个 ID 特征的一些统计量(譬如历史平均点击率,历史平均浏览率)等代替该 ID 取值作为特征;
  • 在深度学习中考虑使用embedding

模型训练及验证、

在处理好特征后,我们可以直接怼一把进行模型的训练和验证,下面是选模型的一般建议(大家可根据实际场景调整)。

  • 对于稀疏型特征(如文本特征,One-hot的ID类特征),我们一般使用线性模型,比如 Linear Regression 或者 Logistic Regression。Random Forest 和 GBDT 等树模型不太适用于稀疏的特征,但可以先对特征进行降维(如PCA,SVD/LSA等),再使用这些特征。稀疏特征直接输入 DNN 会导致网络 weight 较多,不利于优化,也可以考虑先降维,或者对 ID 类特征使用 Embedding 的方式;
  • 对于稠密型特征,推荐使用 XGBoost 进行建模,简单易用效果好;
  • 数据中既有稀疏特征,又有稠密特征,可以考虑使用线性模型对稀疏特征进行建模,将其输出与稠密特征一起再输入 XGBoost/DNN 建模。

验证调参与优化

其实比赛中大家看到某些大神只需要少数的提交次数就可以取得好的结果,而不需要通过反复提交结果去实验,通常是因为他们有比较好的offline的validation set,对于比赛而言,validation set也是至关重要的。一般对数据的划分方式有以下几种:

  • 随机划分:比如随机采样 70% 作为训练集,剩余的 30% 作为验证集。可以采用 KFold 或者 Stratified KFold 的方法来构造训练集和验证集。
  • 按时间划分:一般对应于时序序列数据(比如MDD cup 2017),可以取前一个时间窗(比如前 7 天)数据作为训练集,后 k 天数据作为测试集。这种情况下,划分本地训练集和验证集也需要按时间先后划分。常见的错误方式是随机划分,这种划分方式可能会带来穿越信息,模型严重overfitting。

下面说一下调参方式: 基于大家喜闻乐见的xgboost和LightGBM,大家都是知道常用的调参方式为:
① GridSearchCV:结合交叉验证的网格搜索,可以尽量把所有数据用上,可能的问题是慢,以及网格候选参数不一定选得准。
② EarlyStopping:大概是参赛宝宝里用得比较多的,好处是快,而且基于验证集早停,树的数量比较准确;可能的问题是你的validation set切分可能影响比较大。

其他的一些优化算法,可能包括 Random Search 和 贝叶斯优化调参 等,大家也可以结合具体情况自行选择。

模型集成

这大概是大家最津津乐道的一个话题,一般情况下,怼单模型很容易到达上限,这个时候大家就陷入到,我新加特征效果反而下降等问题里。其实单个模型多多少少会有某种程度的overfitting,所以差异化大的多模型集成往往对最后的结果是有帮助的,而这两届的MDD cup比赛也很好地验证了这一点。

先关于模型多说两句,差异化的模型集成一般才有比较显著的效果,而差异化可以来源于几个方面:
① 特征、数据的差异。这也就是你在各种模型里看到的采样会有用的原因之一。
② 模型的差异,LightGBM和xgboost的集成也许效果不会那么明显(当然一个是leaf-wise的生长方式,一个是level-wise的生长方式,多多少少还是有些差别),但是你用树模型和深度学习融合,效果通常就非常明显了,笔者在MDD cup 2017看到的情况是,top3的team(包括我自己)无一例外地都用了树模型和深度学习模型融合,而效果也是非常显著的。

再模型集成方式做一个简单的说明: 一般情况下,大家对模型做集成,通常的方式无外乎下面几种:
① bagging:类似于直接投票或者求加权平均
② blending:第一层训练基模型,后续的层训练集成模型,注意后面的层用的数据,一定要不同于前面的层,不然很容易overfitting
③ stacking:很有意思又有点难把控的集成方式,关于stacking大佬们说过很多,我就不细说了,可以参考coursera上关于stacking的一节内容https://www.coursera.org/lecture/competitive-data-science/stacking-Qdtt6,也可以在kaggle上找到很多stacking的案例。

 

 

 

6.放个链接

网上怎么还有说的还好的,是我菜了,要不自己怎么拿不到银奖

https://blog.csdn.net/jdbc/article/details/72353798

还是首战,6p,是我菜了

https://blog.csdn.net/jdbc/article/details/72468001

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值