数据探索、特征选择、模型选择、交叉验证、模型融合

原文:https://www.toutiao.com/i6591745523139478030/?group_id=6591745523139478030算法

1.数据探索dom

经常使用图表:性能

查看目标变量的分布。当分布不平衡时,根据评分标准和具体模型的使用不一样,可能会严重影响性能。学习

对 Numerical Variable,能够用 Box Plot 来直观地查看它的分布。测试

对于坐标类数据,能够用 Scatter Plot 来查看它们的分布趋势和是否有离群点的存在。编码

对于分类问题,将数据根据 Label 的不一样着不一样的颜色绘制出来,这对 Feature 的构造颇有帮助。rest

绘制变量之间两两的分布和相关度图表。blog

2.特征选择get

  Feature Selection 最实用的方法也就是看 Random Forest 训练完之后获得的 Feature Importance 了。其余有一些更复杂的算法在理论上更加 Robust,可是缺少实用高效的实现,好比这个。从原理上来说,增长 Random Forest 中树的数量能够在必定程度上增强其对于 Noisy Data 的 Robustness。it

3.特征编码

  这里用一个例子来讲明在一些状况下 Raw Feature 可能须要通过一些转换才能起到比较好的效果。假设有一个 Categorical Variable 一共有几万个取值可能,那么建立 Dummy Variables 的方法就不可行了。这时一个比较好的方法是根据 Feature Importance 或是这些取值自己在数据中的出现频率,为最重要(好比说前 95% 的 Importance)那些取值(有很大可能只有几个或是十几个)建立 Dummy Variables,而全部其余取值都归到一个“其余”类里面。

4.模型选择

  Kaggle 上最经常使用的模型基本都是基于树的模型:  

  Gradient Boosting

  Random Forest

  Extra Randomized Trees

  如下模型每每在性能上稍逊一筹,可是很适合做为 Ensemble 的 Base Model:

  SVM

  Linear Regression

  Logistic Regression

  Neural Networks

5.交叉验证  

  Cross Validation 是很是重要的一个环节。它让你知道你的 Model 有没有 Overfit,是否是真的可以 Generalize 到测试集上。在不少比赛中 Public LB 都会由于这样那样的缘由而不可靠。当你改进了 Feature 或是 Model 获得了一个更高的 CV 结果,提交以后获得的 LB 结果却变差了,通常认为这时应该相信 CV 的结果。固然,最理想的状况是多种不一样的 CV 方法获得的结果和 LB 同时提升,但这样的比赛并非太多。在数据的分布比较随机均衡的状况下,5-Fold CV 通常就足够了。若是不放心,能够提到 10-Fold。可是 Fold 越多训练也就会越慢,须要根据实际状况进行取舍。不少时候简单的 CV 获得的分数会不大靠谱,Kaggle 上也有不少关于如何作 CV 的讨论。好比这个。但总的来讲,靠谱的 CV 方法是 Case By Case 的,须要在实际比赛中进行尝试和学习,这里就再也不(也不能)叙述了。

6.模型融合

  Ensemble Learning 是指将多个不一样的 Base Model 组合成一个 Ensemble Model 的方法。它能够同时下降最终模型的 Bias 和 Variance(证实能够参考这篇论文,我最近在研究相似的理论,可能以后会写新文章详述),从而在提升分数的同时又下降 Overfitting 的风险。常见的 Ensemble 方法有这么几种:

  Bagging:使用训练数据的不一样随机子集来训练每一个 Base Model,最后进行每一个 Base Model 权重相同的 Vote。也即 Random Forest 的原理。

  Boosting:迭代地训练 Base Model,每次根据上一个迭代中预测错误的状况修改训练样本的权重。也即 Gradient Boosting 的原理。比 Bagging 效果好,但更容易 Overfit。

  Blending:用不相交的数据训练不一样的 Base Model,将它们的输出取(加权)平均。实现简单,但对训练数据利用少了。

  Stacking:接下来会详细介绍。  

  从理论上讲,Ensemble 要成功,有两个要素:

  Base Model 之间的相关性要尽量的小。这就是为何非 Tree-based Model 每每表现不是最好但仍是要将它们包括在 Ensemble 里面的缘由。Ensemble 的 Diversity 越大,最终 Model 的 Bias 就越低。Base Model 之间的性能表现不能差距太大。这实际上是一个 Trade-off,在实际中颇有可能表现相近的 Model 只有寥寥几个并且它们之间相关性还不低。可是实践告诉咱们即便在这种状况下 Ensemble 仍是能大幅提升成绩。

  Stacking模型:

  相比 Blending,Stacking 能更好地利用训练数据。以 5-Fold Stacking 为例,它的基本原理如图所示:

  

  整个过程很像 Cross Validation。首先将训练数据分为 5 份,接下来一共 5 个迭代,每次迭代时,将 4 份数据做为 Training Set 对每一个 Base Model 进行训练,而后在剩下一份 Hold-out Set 上进行预测。同时也要将其在测试数据上的预测保存下来。这样,每一个 Base Model 在每次迭代时会对训练数据的其中 1 份作出预测,对测试数据的所有作出预测。5 个迭代都完成之后咱们就得到了一个 #训练数据行数 x #Base Model 数量 的矩阵,这个矩阵接下来就做为第二层的 Model 的训练数据。当第二层的 Model 训练完之后,将以前保存的 Base Model 对测试数据的预测(由于每一个 Base Model 被训练了 5 次,对测试数据的全体作了 5 次预测,因此对这 5 次求一个平均值,从而获得一个形状与第二层训练数据相同的矩阵)拿出来让它进行预测,就获得最后的输出。

  获奖选手每每会使用比这复杂得多的 Ensemble,会出现三层、四层甚至五层,不一样的层数之间有各类交互,还有将通过不一样的 Preprocessing 和不一样的 Feature Engineering 的数据用 Ensemble 组合起来的作法。但对于新手来讲,稳妥当当地实现一个正确的 5-Fold Stacking 已经足够了。

相关文章
相关标签/搜索