树模型

1.正则化

(1) 随机森林

样本有放回随机采样,特征值采样(每个结点都采一次样,而不是一颗树采一次);

剪枝,控制tree深度,控制gain或者gini变化大小

以及控制结点样本数等情况,随机森林中没有剪枝操作,但是有max_depth,min_size等进行控制

 (2)GBDT

和Adaboost一样,我们也需要对GBDT进行正则化,防止过拟合。GBDT的正则化主要有三种方式:

第一种是和Adaboost类似的正则化项,即步长(learning rate),防止过拟合就要稍微加大步长:f_k(x)=f_{k−1}(x)+νh_k(x)

第二种正则化的方式是通过子采样比例(subsample)。

第三种是对于弱学习器即CART回归树进行正则化剪枝。

 (3)XGBOOST

xgboost在代价函数里加入了正则化项,用于控制模型的复杂度。正则化项里包含了:

     树的叶子节点个数

     每个叶子节点上输出的score=L2模的平方和。

Shrinkage(缩减),相当于学习速率。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了消弱每棵树的影响,让后面有更大的学习空间。

2.归一化

归一化是对连续特征来说的。那么连续特征的归一化,起到的主要作用是进行数值缩放。数值缩放的目的是解决梯度下降时,等高线是椭圆导致迭代次数增多的问题。
树模型是不能进行梯度下降,是阶越的,不可导。树模型是通过寻找特征的最优分裂点来完成优化的。由于归一化不会改变分裂点的位置,因此不需要进行归一化。
决策树没有考虑变量之间相关性,每次筛选都只考虑一个变量(因此不需要归一化)
决策树:所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。假设  X为表示特征的随机变量, Y为表示类的随机变量,那么这个条件概率分布可以表示为 P ( Y ∣ X ) X 取值于给定划分下单元的集合, Y 取值于类的集合。各叶结点(单元)上的条件概率往往偏向某一个类,即属于某一类的概率较大。

GBDT的“梯度提升”体现在那个阶段

在构建cart树时使用了损失函数的负梯度,但是在平方损失的情况下,残差=真值-预测值;另外使用损失函数的梯度可以保证损失函数最小值。所以GBDT的梯度提升体现在构建cart树的所需的负梯度阶段,其利用最速下降的近似方法。

  • 随机森林:不需要归一化,概率树模型
  • GBDT:需要归一化,梯度下降
  • XGBOOST:不需要归一化,概率树模型

3.缺失值

  • 随机森林:自动处理缺失值:暴力填补:如果是类别变量缺失,则用众数补全,如果是连续变量,则用中位数。相似度矩阵填补:如果是分类变量,则用没有缺失的观测实例的相似度中的权重进行投票;如果是连续性变量,则用相似度矩阵进行加权求均值。
  • GBDT:
  • XGBOOST:自动处理缺失值:xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树

4.异常值

  • 随机森林:异常值不敏感
  • GBDT:异常值敏感
  • XGBOOST:

5.连续性/离散型变量

  • 随机森林:连续值和离散值
  • gbdt:连续值和离散值
  • XGBOOST:连续值和离散值:Xgb中需要将离散特征one-hot编码

6.特征选择

  • 随机森林(Random Forest):用袋外数据 (OOB) 做预测。

随机森林在每次重抽样建立决策树时,都会有一些样本没有被选中,那么就可以用这些样本去做交叉验证,这也是随机森林的优点之一。它可以不用做交叉验证,直接用oob _score_去对模型性能进行评估。

    具体的方法就是:

        1. 对于每一棵决策树,用OOB 计算袋外数据误差,记为 errOOB1;

        2. 然后随机对OOB所有样本的特征i加入噪声干扰,再次计算袋外数据误差,记为errOOB2;

        3. 假设有N棵树,特征i的重要性为sum(errOOB2-errOOB1)/N;

    如果加入随机噪声后,袋外数据准确率大幅下降,说明这个特征对预测结果有很大的影响,进而说明它的重要程度比较高

  • GBDT:计算特征i在单棵树中重要度的平均值

 

  •  XGboost:该特征每棵树中分裂次数的和去计算的,比如这个特征在第一棵树分裂1次,第二棵树2次……,那么这个特征的得分就是(1+2+...)。

 

7.损失函数

8.采样

  •  随机森林:样本采样(有放回)/特征采样(无放回)
  •  GBDT:样本采样(无放回):比如有100个样本,subsample=0.8,第一棵树训练时随机从100个样本中抽取80%,有80个样本训练模型;第二棵树再在100个样本再随机采样80%数据,也就是80个样本,训练模型;以此类推。
  •  XGBOOST:样本采样(有放回)/特征采样

9.并行

  •  随机森林:模型并行处理

  •  GBDT:模型串行

  •  XGBOOST特征并行处理:将特征列排序后以block的形式存储在内存中,在后面的迭代中重复使用这个结构。这个block也使得并行化成为了可能,

  •  

     

10.特征选择

随机森林:能处理很高维度的数据,并且不用做特征选择

11.分类/回归

  • 随机森林:回归树,分类树
  • GBDT:回归树:GBDT是加法模型,分类模型的结果加减没意义;GBDT主要是利用损失函数的负梯度拟合残差,这就意味每棵树的值是连续。
  • xgboost:回归树,分类树

12.分裂点

  • 随机森林:遍历一个节点内的所有特征,按照公式计算出按照每一个特征分割的信息增益,找到信息增益最大的点进行树的分割。
  • gbdt:遍历一个节点内的所有特征,按照公式计算出通过最小化平方误差
  • XGBoost:不会枚举所有的特征值,而会对特征值进行聚合统计,按照特征值的密度分布,构造直方图计算特征值分布的面积,然后划分分布形成若干个bucket(桶),每个bucket的面积相同,将bucket边界上的特征值作为splitpoint的候选,遍历所有的候选分裂点来找到最佳分裂点。

 

posted on 2020-10-14 09:42  happygril3  阅读(547)  评论(0)    收藏  举报

导航