集成学习总结

集成学习

———————————————————————————————————————————————————————–

Bagging

RF

  1. 采样 + 属性选择
    • 采用Bootstrap随机选择训练样本,Bootstrap有放回的选择训练样本,单个 样本p次不被采样到的概率是 (11m)p ( 1 − 1 m ) p limp(11m)p=1e0.368 lim p → ∞ ( 1 − 1 m ) p = 1 e ≈ 0.368
    • 随机选择k个属性作为子集用于最优子集划分
  2. 优点
    • 在小数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合
    • 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
    • 在创建随机森林的时候,对generlization error使用的是无偏估计。包外估计无偏
    • 训练速度快,并行,可以得到变量重要性排序
  3. 特征重要性
    • 每一个树选择对应的包外数据,计算包外数据偏差记为 error1
    • 随即对包外样本的特征加入噪音,再次计算包外偏差记为 error2
    • N颗树,特征重要性为 (error2error1)N ∑ ( e r r o r 2 − e r r o r 1 ) N
  4. 预测结果 根据各颗树的投票的来

———————————————————————————————————————————————————————–

Boosting

GBDT

  1. GBDT多轮迭代,每轮产生一个弱分类器,每个分类器拟合上一轮的残差
    一般而言,GBDT选择CART回归树最为基分类器
  2. 模型:

Fm(m)m=1MT(x:θm)(1) (1) F m ( m ) − ∑ m = 1 M T ( x : θ m )
训练m轮,每轮产生一个弱分类器 T(x;θm) T ( x ; θ m ) ,损失函数:

i=1NL(yi,F(m1(xi)+T(xi;θm))(2) (2) ∑ i = 1 N L ( y i , F ( m − 1 ( x i ) + T ( x i ; θ m ) )

  1. 原理:gbdt 极小化经验误差来确定下个分类器的参数,分类器去拟合残差的负梯度(作为残差的近似值),采用加法模型不断减少训练过程中产生的残差
  2. 具体求导过程以m+1轮的负梯度为例,以交叉熵为例
    对于 yi y i ,
    L(yi,F(m1(xi)+T(xi;θm))T(x;θm)=ki=1yiklog(Fm1(xi)+T(xi;θm))T(x;θm)=i=1kyikFm1(x)+T(xi;θm)(3) ∂ L ( y i , F ( m − 1 ( x i ) + T ( x i ; θ m ) ) ∂ T ( x ; θ m ) = ∂ ∑ i = 1 k y i k l o g ( F m − 1 ( x i ) + T ( x i ; θ m ) ) ∂ T ( x ; θ m ) (3) = ∑ i = 1 k y i k F m − 1 ( x ) + T ( x i ; θ m )
  3. 特征选择 CART 树的特征选择过程,默认为CART回归树
    • 选择特征
    • 选择切分点
    • 暴力遍历特征+遍历可能的切分点
  4. 如何分类
    • k类每轮就有k颗树
    • 输入为 [0, 0, 0, 0, …1, …]
    • 与回归树类似的拟合 方式

XGBOOST

  1. 损失函数:

i=1NL(yi,F(m1(xi)+T(xi;θm))+i=1kcomplex(Tree)(4) (4) ∑ i = 1 N L ( y i , F ( m − 1 ( x i ) + T ( x i ; θ m ) ) + ∑ i = 1 k c o m p l e x ( T r e e )

2. 通过极小化结构误差来得到下一个分类器的参数,加入了L1 norm与 L2 norm, 叶子结点个数与叶子节点里的值:

complex(Tree)=αLeaves+12βj=1Tω2j(5) (5) c o m p l e x ( T r e e ) = α L e a v e s + 1 2 β ∑ j = 1 T ω j 2

  1. 增益

    Gain=G2LHL+β+G2RHR+β(GL+GR)2HL+HR+βα G a i n = G L 2 H L + β + G R 2 H R + β − ( G L + G R ) 2 H L + H R + β − α

    左孩子得分+右孩子得分-不分裂得分-引入额外叶子损失,用于限制树的生长

  2. 优点:

    • 使用二阶导数进行拟合,而GBDT只使用一阶
    • 预数据特征预排序,block存储利于并行计算;
    • l1 l2正则减轻过拟合
  3. 缺点
    • 预排序方法(pre-sorted):首先,空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结
    • 对cache优化不友好。在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对cache进行优化。同时在每一层树建立的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序不一样

LightGBM

  1. 只存储离散化后的值,内存消耗小
  2. 使用直方图算法,将离连续的浮点数离散化为k个整数,同时构造宽度为k的直方图 ,在便利数据的时候,根据离散化的值作为索引累计统计量,在遍历一遍数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历最优分割点
  3. 降低计算代价,预排序算法每遍历一次特征值就要计算一次分裂增益,而直方图只需要计算k次,时间复杂度从O(data fetures)降低到O(k feature) 牺牲一定精度来提高切分效率

———————————————————————————————————————————————————————–
小结 :
RF

  • 是一种Bagging 他的基学习器是分类树或者回归树 最终的结果是多个学习器投票或者是平均。
  • 他每棵树的训练是并行的,不依赖于上一轮的结果。
  • 它主要关注于降低模型的方差,所有他的基分类器一般是可以是比较深的树 (低偏差的)
  • RF在训练每一颗树的时候,对训练集进行了bootstraping 有放回的采样 他不需要划分测试集 36.7的数据用于测试(包外估计),对异常值不敏感。随机选择特征,对当前属性随机选择k个属性作为子集用于最优属性的划分,一般取logk(样本扰动+属性扰动)

GBDT

  • GBDT采用的是Boosting的思想,它是一种加法模型,最终的分类结果是所有分类器加权求和的,
  • 他的每一颗树的学习依赖于上一课树的残差,利用上一课树的负梯度作为残差的近似值,进而拟合Cart回归树,
  • 它的训练过程是串行的。
  • GBDT关注的是降低模型的偏差,这是与RF不同的,他选的基分类一般是相对于RF较浅(低方差的树),对异常值敏感。只能使用CART回归树。

XGBOOST

  • XGBOOST是一种对GBDT的改进算法,他同样属于Booting方法。
  • 与GBDT以期望损失作为优化目标函数不同,XGBOOST考虑优化结构损失,即加入了L1 L2正则 分别来限制叶子结点的个数与叶子结点里的值。
  • GBDT在优化时使用了一阶导数,而XGBOOST还用使用了二阶导数。决
  • 策树在学习最耗时的步骤是特征的排序,确定最佳分割点,XGBOOST预先对数据进行了排序,保存下来,在后面的迭代中反复使用较小计算。
  • XGBOOST对于最佳特征与分割点的选择是并行的,同时同一层叶子结点的分裂也是并行的。XGBOOST能够处理缺失值,自动将它分到左边或右边(损失函数小的)
  • 过拟合参数
    • eta 学习率
    • max_depth 深度
    • subsample 采集比例
    • colsample_bytree 特征采样比例
    • min_child_weight 叶节点样本个数
    • lambda l2正则
    • alpha l1正则
    • gamma 分裂最小损失

LightGBM

  • XGBOOST的level-wise将当前所有叶子 结点一视同仁,有些叶子节点分裂收益很小,对结果没有什么影响,但还要分裂,加重了计算代价。其次是,预排序方法的空间消耗较大,不仅要保存特征值 ,还要保存特征值的排序索引
  • LightGBM 与XGBOOST使用level-wise的建树方式不同,他采取了Leaf-wise的策略,他的做法是当前叶子结点中选择分裂收益最大的结点进行分类,如此递归进行。
  • LightGBM使用了基于histogram的决策树方法, Hitsogram算法将特征分桶离散化,遍历数据一遍确定桶的值。在内存与计算代价都有不小的优势。内存上 直方图算法的内存消耗仅为对特征值分桶后离散化的值,而xgboost是2*特征的存储量*4bytes。
  • 计算上,预排序算法在选择好分裂计算分裂收益时,所由样本的特征值,时间为data,而直方图只需要遍历桶就可以了,时间为bin
  • 参数
    • num_leaves 叶子树
    • max_depth 深度
    • min_data_in_leaf 树中最小的样本数
    • feature_fraction 没课树采样多少特征
    • lambda_l1、lambda_l2

你可能感兴趣的:(集成学习总结)