当前位置: 代码迷 >> 综合 >> task4:二手车价格预测的模型结果融合-学习笔记
  详细解决方案

task4:二手车价格预测的模型结果融合-学习笔记

热度:8   发布时间:2023-12-29 21:50:11.0

模型融合方法学习总结
  一般来说,通过融合多个不同的模型,可能提升机器学习的性能,这一方法在各种机器学习比赛中广泛应用,比如在kaggle上的otto产品分类挑战赛①中取得冠军和亚军成绩的模型都是融合了1000+模型的“庞然大物”。
https://www.cnblogs.com/libin47/p/11169994.html

常见的集成学习&模型融合方法包括:

1,简单加权融合:

a,回归(分类概率):算术平均融合和几何平均融合
  b,分类:投票(voting)
   在不改变模型的情况下,直接对各个不同的模型预测的结果,进行投票或者平均,这是一种简单却行之有效的融合方式
  c,综合:排序融合(Rank averaging),log融合

2,stacking/blending:

Stacking
   Stacking模型的本质是一种分层的结构,用了大量的基分类器,将其预测的结果作为下一层输入的特征,这样的结构使得它比相互独立训练模型能够获得更多的特征。
  下面以一种易于理解但不会实际使用的两层的stacking方法为例,简要说明其结构和工作原理:(这种模型问题将在后续说明)
  假设我们有三个基模型M1,M2,M3,用训练集对其进行训练后,分别用来预测训练集和测试集的结果,得到P1,T1,P2,T2,P3,T3
  在这里插入图片描述
我们将P1,P2,P3合并,作为下一层的训练集,用新的训练集训练模型M4。然后用M4来预测新的测试集(T1,T2,T3合并)得到最终的预测结果。
  这种方法的问题在于,模型M1/2/3是我们用整个训练集训练出来的,我们又用这些模型来预测整个训练集的结果,毫无疑问过拟合将会非常严重。因此在实际应用中往往采用交叉验证的方法来解决过拟合问题。
  首先放几张图,我们着眼于Stacking方法的第一层,以5折交叉验证为例说明其工作原理:
  在这里插入图片描述
  1、首先我们将训练集分为五份。
  2、对于每一个基模型来说,我们用其中的四份来训练,然后对未用来的训练的一份训练集和测试集进行预测。然后改变所选的用来训练的训练集和用来验证的训练集,重复此步骤,直到获得完整的训练集的预测结果。
  3、对五个模型,分别进行步骤2,我们将获得5个模型,以及五个模型分别通过交叉验证获得的训练集预测结果。即P1、P2、P3、P4、P5。
  4、用五个模型分别对测试集进行预测,得到测试集的预测结果:T1、T2、T3、T4、T5。
  5、将P15、T15作为下一层的训练集和测试集。在图中分别作为了模型6的训练集和测试集。
  在这里插入图片描述
  在这里插入图片描述
Blending
  Blending是一种和Stacking很相像的模型融合方式,它与Stacking的区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,而是建立一个Holdout集,例如10%的训练数据,第二阶段的stacker模型就基于第一阶段模型对这10%训练数据的预测值进行拟合。

说白了,就是把Stacking流程中的K-Fold CV 改成 HoldOut CV。
  在这里插入图片描述
  3,boosting/bagging(在gboost,adaboost,GBDT中常用到)
  多树的提升方法
  Boosting
  Boosting是一种将各种弱分类器串联起来的集成学习方式,每一个分类器的训练都依赖于前一个分类器的结果,顺序运行的方式导致了运行速度慢。和所有融合方式一样,它不会考虑各个弱分类器模型本身结构为何,而是对训练数据(样本集)和连接方式进行操纵以获得更小的误差。但是为了将最终的强分类器的误差均衡,之前所选取的分类器一般都是相对比较弱的分类器,因为一旦某个分类器较强将使得后续结果受到影响太大。所以多用于集成学习而非模型融合(将多个已经有较好效果的模型融合成更好的模型)。
   其基本工作机制如下:
   1,从初始样本集中训练出一个基学习器;
   2,根据基学习器的表现对样本集分布进行调整,使得做错的样本能在之后的过程中受到更多的关注;
   3,用调整后的样本集训练下一个基学习器;
   4,重复上述步骤,直到满足一定条件
  注意,一般只有弱分类器都是同一种分类器(即同质集成)的时候,才将弱分类器称为基学习器,如果是异质集成,则称之为个体学习器。由于不是本文重点,所以此处不作区分。特此说明。
  最终将这些弱分类器进行加权相加。
  
  Bagging
  Bagging是Bootstrap Aggregating的缩写。这种方法同样不对模型本身进行操作,而是作用于样本集上。采用的是随机有放回的选择训练数据然后构造分类器,最后进行组合。与Boosting方法中各分类器之间的相互依赖和串行运行不同,Bagging方法中基学习器之间不存在强依赖关系,且同时生成并行运行。

其基本思路为:
  1,在样本集中进行K轮有放回的抽样,每次抽取n个样本,得到K个训练集;
  2,分别用K个训练集训练得到K个模型。
  3,对得到的K个模型预测结果用投票或平均的方式进行融合。

在这里,训练集的选取可能不会包含所有样本集,未被包含的数据成为包/袋外数据,可用来进行包外误差的泛化估计。每个模型的训练过程中,每次训练集可以取全部的特征进行训练,也可以随机选取部分特征训练,例如极有代表性的随机森林算法就是每次随机选取部分特征。
  下面仅从思想层面介绍随机森林算法:
  1,在样本集中进行K轮有放回的抽样,每次抽取n个样本,得到K个训练集,其中n一般远小于样本集总数;选取训练集,在整体特征集M中选取部分特征集m构建决策树,其中m一般远小于M;
  2,在构造每棵决策树的过程中,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点都采取相同的分裂规则进行构建,直到该节点的所有训练样例都属于同一类或者达到树的最大深度;
  3,重复上述步骤,得到随机森林;
  4,多棵决策树同时进行预测,对结果进行投票或平均得到最终的分类结果
  5,多次随机选择的过程,使得随机森林不容易过拟合且有很好的抗干扰能力。