模型融合和树模型 小笔记

1,093 阅读5分钟

[toc]

模型融合和树模型 小笔记

组合策略

voting

voting策略是投票思想。
1.一人一票,票多者得
2.加权投票,一人可能有多张票
3.直接选其中最牛逼那个人

average

就是平均取值

模型融合种类

先明确一下,模型融合是将多个弱模型融合成一个强模型(往往需要meta模型弱才好)

Boostrap

有放回的均匀抽样(可以用来给不同的弱模型以不同之数据)

Bagging

bagging需要基分类器方差尽可能大。
bagging == boostrap aggregation,
每次boostrap得到的训练集给每个弱模型训练,然后融合结果(这里的基学习器权重是各自的,并行学习)

但是bagging也有局限,就是如果大部分基分类器都分类错误,那么会很麻烦,由此我们需要一个会对分类错误进行修正的方法boosting。
bagging一般使用强学习器,主要关注降低方差

Boosting

与bagging相比,boosting在于放大错误,比如说,在这一次基学习器分类错误,那么就把这个对应的权重放大,然后再替换掉下一次基学习器的权重。也就是说boosting是前一个基学习器进行分类,然后把权重转移给下一个基学习器,如此类推。。。。。最后将所有的结果进行汇总。
boosting一般使用弱学习器,主要关注降低偏差

boosting的两个权重

  • 第一个为弱分类器之间传递的权重,即参数权重
    (我发现分为两种,一种是直接改变分错的权重,一种是把前N-1个模型都分错的数据添加到新的训练集里面再用来训练第N个模型)
    (改变权重相当于变相采样,改变了样本的分布)
  • 第二个权重就是弱分类器自身的权重,就是弱分类器之间谁说的话更有用(根据分类错误率来)

adaboost

是一个加法模型+前向分布算法+指数损失函数
是boosting中的代表,第一个具有适应性的算法,适应弱学习器各自的训练误差率。

  • 一般来说adaboost的弱学习器为一层的决策树
  • 自适应的参数权重改变(选用指数损失函数),这里用林轩田老师的图(也可以根据分错的数据来进行数据的再采样)
  • 弱分类器的投票机制变为加权的

Gradient boosting

adaboost采用的是指数损失函数,对异常点非常敏感,也就导致了在有噪音的情况下,影响比较大。于是就有了GB。GB不在乎用什么损失函数,它是将负梯度作为目标,通过不断拟合前一个模型损失函数的负梯度(也叫伪残差)而不断改进。
blog.csdn.net/zpalyq110/a…

stacking

stacking是一种分层模型集成框架,以两层为例子。
数据组成: train + test + valid
使用5-fold交叉验证

  • level 0 用train训练第一个模型,然后预测test和valid,这样重复5次后,会得到5倍的valid pred以及5倍的test pred,然后将valid pred排好作为新的训练集。test pred 用加权平均(其他方法也行)把数目控制到和原有的test数目一致,然后作为新的test(这只是一个模型,其他模型还要重复上述动作),这仅仅是一列特征

  • level 1 将每个模型得到的valid pred 和 test valid分别凭借起来作为level 1 模型的训练集和测试集。这里level 1模型中训练集的label Y是真实数据(train+valid)的label Y,测试集同理。


相比于blending,stacking两层都使用了所有的训练数据。
不同于boosting和bagging,stacking中基学习器一般允许不同的模型,如LR,SVM,LR等等, 属于对基学习器的非线性融合

blending

和stacking类似,不过没用k-fold,是直接划分部分数据作为验证集

CART

classification and regression tree

  • CART分类树 采用gini指数作为划分标准,gini表示不稳定性,选取gini最小的特征
  • CART回归树 根据数据计算每个切分点的平均误差,选取最小的作为最优切分点进行切分。具体看 zhuanlan.zhihu.com/p/36108972

random forest

rf = bagging + CART 是一个加法模型
bagging的基学习器要求强学习器并且方差要大,而DT恰好强而且方差大。bagging的随机性能够有效降低DT不同划分条件带来的方差问题。所以,先bagging随机取样

boosting tree

boosting tree(提升树) == adaboost + CART

  • 分类提升树
    用gini
    这里有个想法,对于分类提升树,是不是可以通过将分类错误数据放到训练集里然后给下一个CART分类树用(这样就不用计较它的weight变化)
  • 回归提升树(好像也叫残差树):
    损失函数为平方函数,加法模型,要设置损失函数的阈值
    树的划分可以参考上面CART的网址,接下来残差的计算也差不多,详细可看下面网址
    www.jianshu.com/p/7902b2eb5…
    blog.csdn.net/zpalyq110/a…

Gradient Boosting Decisioin Tree

GBDT = gradient boosting + CART 梯度提升树
与boosting tree类似,不过不是用残差作为新的数据集,而是用损失函数的负梯度值作为新的训练数据的y值。(对于回归问题来说,负梯度就是残差)
其要求高偏差低方差的弱分类器
blog.csdn.net/zpalyq110/a… 最后有实例

xgboost

本质上是GBDT,但把速度和效率发挥到极致
可以用线性分类器作为基学习器
GBDT是机器学习算法,XGBoost是该算法的工程实现。 xgboost使用二阶导数分离了损失函数的选择和参数调优


stats.stackexchange.com/questions/2…
此处应有笔记连接。。。。

lightGBM

  • Histogram算法:直方图算法。
  • GOSS算法:基于梯度的单边采样算法。
  • EFB算法:互斥特征捆绑算法。
    LightGBM = XGBoost + Histogram + GOSS + EFB
    zhuanlan.zhihu.com/p/91167170
    此处也应有笔记连接

参考资料

blog.csdn.net/wangqi880/a…
www.jianshu.com/p/a5b28cdfd… boosting, boostrap, bagging
blog.csdn.net/FrankieHell…

blog.csdn.net/u010412858/…
zhuanlan.zhihu.com/p/91836593 stacking和blending
zhuanlan.zhihu.com/p/42229791 stacking和blending
zhuanlan.zhihu.com/p/91659366 stacking和blending
zhuanlan.zhihu.com/p/57689719 bagging的局限与boosting的弥补
zhuanlan.zhihu.com/p/37358517 adaboost和gradient boost
www.uml.org.cn/sjjmwj/2019… adaboost
www.zhihu.com/question/37… boost and adaboost
zhuanlan.zhihu.com/p/36108972 CART
zhuanlan.zhihu.com/p/59751960 一文弄懂boost,提升树,残差书,GBDT
blog.csdn.net/ccblogger/a… 提升树和梯度提升树
www.cnblogs.com/mantch/p/11… xgboost blog.csdn.net/v_JULY_v/ar… xgboost
zhuanlan.zhihu.com/p/91167170 lightGBM stats.stackexchange.com/questions/2…