Datawhale-零基础入门数据挖掘 - 二手车交易价格预测-模型融合
Datawhale-零基础入门数据挖掘 - 二手车交易价格预测-模型融合
今天在一个比赛的top1的代码中看到了这样一句话分享给大家:
实际在竞赛中,你花下的时间应该通常是: 特征工程 > 模型融合 > 算法模型 > 参数调整或者是:模型融合 > 特征工程 > 算法模型 > 参数调整。
由此可以看出一个好的比赛成绩,特征工程与模型融合的重要性。
1.模型融合目标
对于多种调参完成的模型进行模型融合。
完成对于多种模型的融合,提交融合结果并打卡。
2.内容介绍(下面主要说一下stacking)
模型融合是比赛后期一个重要的环节,大体来说有如下的类型方式。
简单加权融合:
回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);
分类:投票(Voting)
综合:排序融合(Rank averaging),log融合
stacking/blending:
构建多层模型,并利用预测结果再拟合预测。
boosting/bagging(在xgboost,Adaboost,GBDT中已经用到):
多树的提升方法
回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);
分类:投票(Voting)
综合:排序融合(Rank averaging),log融合
stacking/blending:
构建多层模型,并利用预测结果再拟合预测。
boosting/bagging(在xgboost,Adaboost,GBDT中已经用到):
多树的提升方法
3.回归任务中的加权融合与分类任务中的Voting(模型的结果层面的融合技术)
3.1回归任务中的加权融合
给出的baseline里面最后的lgb和xgb的融合就使用了这种方式,当然这种方式也比较好理解,就是根据各个模型的最终预测表现分配不同的权重以改变其对最终结果影响的大小。对于正确率低的模型给予更低的权重,而正确率更高的模型给予更高的权重。
3.1分类任务中的Voting
投票法(Voting)是集成学习里面针对分类问题的一种结果结合策略。基本思想是选择所有机器学习算法当中输出最多的那个类。 机器学习的算法有很多,对于每一种机器学习算法,考虑问题的方式都略微有所不同,所以对于同一个问题,不同的算法可能会给出不同的结果,那么在这种情况下,我们选择哪个算法的结果作为最终结果呢?那么此时,我们完全可以把多种算法集中起来,让不同算法对同一种问题都进行预测,最终少数服从多数,这就是集成学习的思路。
Stacking构建多层模型
链接: https://zhuanlan.zhihu.com/p/26890738.
先附上一张stacking的原理图
。
Titanic 例子:Train Data有890行。(请对应图中的上层部分)
每1次的fold,都会生成 713行 小train, 178行 小test。我们用Model 1来训练 713行的小train,然后预测 178行 小test。预测的结果是长度为 178 的预测值。
这样的动作走5次! 长度为178 的预测值 X 5 = 890 预测值,刚好和Train data长度吻合。这个890预测值是Model 1产生的,我们先存着,因为,一会让它将是第二层模型的训练来源。
重点:这一步产生的预测值我们可以转成 890 X 1 (890 行,1列),记作 P1 (大写P)
接着说 Test Data 有 418 行。(请对应图中的下层部分,对对对,绿绿的那些框框)
每1次的fold,713行 小train训练出来的Model 1要去预测我们全部的Test Data(全部!因为Test Data没有加入5-fold,所以每次都是全部!)。此时,Model 1的预测结果是长度为418的预测值。
这样的动作走5次!我们可以得到一个 5 X 418 的预测值矩阵。然后我们根据行来就平均值,最后得到一个 1 X 418 的平均预测值。
重点:这一步产生的预测值我们可以转成 418 X 1 (418行,1列),记作 p1 (小写p)走到这里,
你的第一层的Model 1完成了它的使命。第一层还会有其他Model的,比如Model 2,同样的走一遍, 我们有可以得到 890 X 1 (P2) 和 418 X 1 (p2) 列预测值。
这样吧,假设你第一层有3个模型,这样你就会得到:
来自5-fold的预测值矩阵 890 X 3,(P1,P2, P3) 和 来自Test Data预测值矩阵 418 X 3, (p1, p2, p3)。
到第二层了…
来自5-fold的预测值矩阵 890 X 3 作为你的Train Data,训练第二层的模型来自Test Data预测值矩阵 418 X 3 就是你的Test Data,用训练好的模型来预测他们吧。
并附上代码图