弱分类器的进化--Bagging、Boosting、Stacking

  • 一般来说集成学习可以分为三大类
  • 用于减少方差的bagging
  • 用于减少偏差的boosting
  • 用于提升预测结果的stacking

一、Bagging(1996)

 

1、随机森林(1996)

RF = bagging + random-combination C&RT

(1)RF介绍

  • RF通过Bagging的方式将许多个CART组合在一起,不考虑计算代价,通常树越多越好。
  • RF中使用CART没有经过剪枝操作,一般会有比较大的偏差(variance),结合Bagging的平均效果可以降低CART的偏差。
  • 在训练CART的时候,使用有放回随机抽取样本(bootstraping)、随机的抽取样本的特征、甚至将样本特征通过映射矩阵P投影到随机的子空间等技术来增大g(t)的随机性、多样性。

(2)RF算法结构与优势

 

(3)OOB(Out of Bag)和自验证(Automatic Validation)

【1】OOB

  RF中使用的有放回的抽样方式(Bootstrapping)会导致能有些样本在某次训练中没有被使用,没有被用到的样本称为OOB(Out-Of-Bag)。

当样本集合很大的时候,如果训练数据的大小和样本集合的大小相同,那么某个样本没有被使用的概率大约为1/e,OOB的大小也约为样本集合的1/e,下面是具体的数学描述。

【2】RF Validation

  RF 并不注重每棵树的分类效果,实际中也不会用OOB数据来验证g(t),而是使用OOB数据来验证G。但同时为了保证验证数据绝对没有在训练时“偷窥”,使用的G是去掉与测试的OOB相关的g(t)组成的G-。

最后将所有的OOB测试结果取平均。林说:实际中Eoob通常都会非常精确。

 

(4)特征选择和排列检验

在实际中,当样本的特征非常多的时候,有时会希望去掉冗余或者与结果无关的特征项,选取相对重要的特征项。

线性模型中,特征项的重要性使用|Wi|来衡量,非线性模型中特征项重要性的衡量一般会比较困难。

RF中使用统计中的工具排列检验(Permutation Test)来衡量特征项的重要性。

 

N个样本,每个样本d个维度,要想衡量其中某个特征di的重要,根据Permutation Test把这N个样本的di特征项都洗牌打乱,洗牌前后的误差相减就是该特征项重要性。

 

RF中通常不在训练时使用Permutation Test,而是在Validation 时打乱OOB的特征项,再评估验证,获得特征项的重要性。

 

 

(5)RF的应用

  • 在简单数据集上,相比单棵的CART树,RF模型边界更加平滑,置信区间(Margin)也比较大
  • 在复杂且有含有噪声的数据集上,决策树通常表现不好;RF具有很好的降噪性,相比而言RF模型也会表现得很好
  • RF中选多少棵树好呢?总的来说是越多越好!!!实践中,要用足够多的树去确保G的稳定性,所以可以使用G的稳定性来判断使用多少棵树好。

 

 

 

 

 

 

 

 

二、Boosting(1999)

Boosting主要干两件事:调整训练样本分布,使先前训练错的样本在后续能够获得更多关注 ;集成基学习数目 

 

 

1.GBDT

2.Adaboost

3.Xgboost

 

三、stacking

  上半部分是用一个基础模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing data。注意:在stacking中此部分数据会用到整个traing set。如:假设我们整个training set包含10000行数据,testing set包含2500行数据,那么每一次交叉验证其实就是对training set进行划分,在每一次的交叉验证中training data将会是8000行,testing data是2000行。

   每一次的交叉验证包含两个过程,1. 基于training data训练模型;2. 基于training data训练生成的模型对testing data进行预测。在整个第一次的交叉验证完成之后我们将会得到关于当前testing data的预测值,这将会是一个一维2000行的数据,记为a1。注意!在这部分操作完成后,我们还要对数据集原来的整个testing set进行预测,这个过程会生成2500个预测值,这部分预测值将会作为下一层模型testing data的一部分,记为b1。因为我们进行的是5折交叉验证,所以以上提及的过程将会进行五次,最终会生成针对testing set数据预测的5列2000行的数据a1,a2,a3,a4,a5,对testing set的预测会是5列2500行数据b1,b2,b3,b4,b5。

   在完成对Model1的整个步骤之后,我们可以发现a1,a2,a3,a4,a5其实就是对原来整个training set的预测值,将他们拼凑起来,会形成一个10000行一列的矩阵,记为A1。而对于b1,b2,b3,b4,b5这部分数据,我们将各部分相加取平均值,得到一个2500行一列的矩阵,记为B1。

   以上就是stacking中一个模型的完整流程,stacking中同一层通常包含多个模型,假设还有Model2: LR,Model3:RF,Model4: GBDT,Model5:SVM,对于这四个模型,我们可以重复以上的步骤,在整个流程结束之后,我们可以得到新的A2,A3,A4,A5,B2,B3,B4,B5矩阵。

   在此之后,我们把A1,A2,A3,A4,A5并列合并得到一个10000行五列的矩阵作为training data,B1,B2,B3,B4,B5并列合并得到一个2500行五列的矩阵作为testing data。让下一层的模型,基于他们进一步训练。

  以上即为stacking的完整步骤!

四、总结

1.Bagging和Boosting的区别

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

 

2.RF、Adabost、GBDT模型优缺点

RF

  • 优点:
    • 训练可以并行化,对于大规模样本的训练具有速度的优势
    • 由于进行随机选择决策树划分特征列表,这样在样本维度比较高的时候,仍然具有比较高 的训练性能
    • 给出各个特征的重要性列表
    • 于存在随机抽样,训练出来的模型方差小,泛化能力强
    • RF实现简单
  • 缺点:
    • 在某些噪音比较大的特征上,RF模型容易陷入过拟合
    • 取值比较多的划分特征对RF的决策会产生更大的影响,从而有可能影响模型的效果

AdaBoost

  • 优点:
    • 可以处理连续值和离散值
    • 模型的鲁棒性比较强
    • 解释强,结构简单
  • 缺点:
    • 对异常样本敏感,异常样本可能会在迭代过程中获得较高的权重值,最终影响模型效果

GBDT

  • 优点:
    • 可以处理连续值和离散值
    • 在相对少的调参情况下,模型的预测效果也会不错
    • 模型的鲁棒性比较强
  • 缺点:
    • 由于弱学习器之间存在关联关系,难以并行训练模型

3.GBDT和XGBoost比较

  • 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
  • 传统GBDT以CART作为基分类器,xgboost还支持线性分类器。
  • xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和
  • Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。
  • 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
  • xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

 

 

参考文献:

【1】详解stacking过程

转载于:https://www.cnblogs.com/nxf-rabbit75/p/9275367.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值