各种树模型细节比较(分类树,回归树,随机森林,gbdt, xgboost)

前言

树模型实在是个庞大的家族,里面有许多细节值得注意,怕自己遗忘,写一期总结方便以后查询。先介绍三种划分方式:
信息增益:

  1. 计算数据集D中的经验熵H(D):
    在这里插入图片描述
  2. 计算特征A对数据集D的经验条件H(D/A):
    在这里插入图片描述
  3. 计算休息增益差:
    在这里插入图片描述
    其中D为样本容量,pi代表当前节点D中i类样本比例。设有K个类(1,2,…,K),Ck为属于为K类样本的样本数。设特征A有j个不同的取值(a1,…,aj),根据A的取值将D划分为D1,…,Dj(代表样本数)。

信息增益率:

  1. 分裂信息计算公式:
    在这里插入图片描述
  2. 信息增益率定义为:
    在这里插入图片描述
  3. 选择最大增益率作为分裂特征

Gini系数:
在CART树中使用,这里CART先不展开后文会写。

  1. 从根节点开始,对节点计算现有特征的基尼指数。
    在这里插入图片描述
  2. 对每一个特征,例如A,再对其每个可能的取值如a,根据样本点对A=a的结果划分为两个部分(这里假设A只有两个值,因为CART是二叉树):
    在这里插入图片描述
  3. 上面的式子表示的是不确定性的大小,越小表示数据纯度越高。

分类树

ID3:
ID3算法的核心是在决策树各个节点上根据信息增益来选择进行划分的特征,然后递归地构建决策树。
具体方法:

  1. 从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益值最大的特征作为节点的划分特征;
  2. 由该特征的不同取值建立子节点;
  3. 再对子节点递归地调用以上方法,构建决策树;
  4. 到所有特征的信息增益都很小或者没有特征可以选择为止,得到最终的决策树。

ID3的局限:

  1. 没有剪枝。
  2. 采用信息增益作为选择最优划分特征的标准,然而信息增益会偏向那些取值较多的特征(这也是C4.5采用信息增益率的原因)。

C4.5:
C4.5与ID3相似,但对ID3进行了改进:

  1. 信息增益率来选择划分特征,克服了用信息增益选择的不足。
  2. 在构造树的过程中进行剪枝。
  3. 可对连续值缺失值进行处理。

选择信息增益率的原因:当特征的取值较多时,根据此特征划分得到的子集纯度有更大的可能性会更高(对比与取值较少的特征),因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较偏向取值较多的特征。

CART:

  1. CART假设决策树是二叉树,这样的决策树等价于递归的二分每个特征。
  2. 对回归树(最小二乘回归树)用平方误差最小化准则
  3. 对分类树用基尼系数最小化准则进行特征选择,同时决定该特征的最优切分点,生成二叉树。

总结:分类树使用信息增益或基尼系数、增益比率来划分节点;每个节点样本的类别情况投票决定测试样本的类别。

回归树

  • 回归树是可以用于回归的决策树模型,一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值.与分类树不同的是,回归树对输入空间的划分采用一种启发式的方法,会遍历所有输入变量,找到最优的切分变量j最优的切分点s即选择第j个特征xj和它的取值s将输入空间划分为两部分,然后重复这个操作
  • 分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差即(每个人的年龄-预测年龄)^2的总和/N。
    在这里插入图片描述
  • 也就是被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最可靠的分枝依据。分枝直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。

其中f(x)是每个划分单元的预测值,这个预测值是该单元内每隔样本的均值,即:
在这里插入图片描述
(将输入空间划分为M个单元R1,R2,…,Rm)
那么,j和s的求解可以用下式进行 :
在这里插入图片描述
其中R1 R2是分割后的两个空间。
总结:回归树使用最大均方差划分节点;每个节点样本的均值作为测试样本的回归预测值。

随机森林

算法步骤:

  1. 用有抽样放回的方法(bootstrap)从样本集中选取n个样本作为一个训练集。
  2. 用抽样得到的样本集生成一棵决策树。在生成的每一个结点:1.随机不重复地选择d个特征 2.利用这d个特征分别对样本集进行划分,找到最佳的划分特征(可用基尼系数、增益率或者信息增益判别)。
  3. 重复步骤1到步骤2共k次,k即为随机森林中决策树的个数。
  4. 用训练得到的随机森林对测试样本进行预测,并用票选法决定预测的结果。

优点:

  1. 列抽样在一定程度避免过拟合。
  2. 每棵树都是随机选择特征样本,使得模型有很抗的看噪声能力 。
  3. 列采样同时也能使得模型能处理高纬度数据,并且不用做特征选择。
  4. 可以在树模型的层次进行并行运算。
  5. 可以用来做缺失值处理。

缺点

  1. 模型训练和预测都太慢。
  2. 同时训练包含大量噪声的样本很容易造成过拟合。

GBDT

全称gradient Boosting Decision Tree, 即梯度提升树。GBDT利用了提升树的思想,主要思想利用梯度下降法拟合残差。使用损失函数的负梯度的值作为回归问题提升树算法的残差近似值。负梯度为:
在这里插入图片描述
为什么已经有了基于残差的回归树,还提出基于负梯度来替代残差的替代提升树?
《统计学习方法》中给出的解释是:当损失函数是平方损失和对数损失时,每一步的优化是很简单的,但是对于一般的损失函数而言,往往每一步的优化不是那么容易,使用负梯度代替残差。kaggle blog给出的解释是:Although we can minimize this function directly, gradient descent will let us minimize more complicated loss functions that we can’t minimize directly.(虽然我们可以直接最小化这个函数,但是梯度下降可以让我们最小化更复杂的损失函数,这些函数不能直接最小化。)
GBDT借助了梯度下降的优化方法,梯度下降的参数更新方程如下:
在这里插入图片描述
为了最优化它,参数沿着梯度下降的方法不断的迭代。如果描述为增量,那么有:
在这里插入图片描述
在这里插入图片描述
将其推广到梯度提升树的函数空间:

在这里插入图片描述
因为梯度下降对应目标函数下降最快的位置,所以最好的优化情况便是每次的增量等于负梯度乘以学习率。所以在下面GBDT算法中我们可以看到,算法每次迭代的目的都是为了拟合梯度。
注意: 这里要讲明白一点:我们优化的当前模型(增量模型),其目标值是负梯度,也就是说,我们不是使用负梯度去拟合残差。而是在GBDT中,我们用负梯度的值近似充当残差的值,然后使用当前模型去拟合负梯度的值(在这个模型优化的过程中,负梯度的值就是真实的y,从下面的算法流程中也可以看到这一点)。
算法流程:
各种树模型细节比较(分类树,回归树,随机森林,gbdt, xgboost)_第1张图片

XGBOOST

XGBOOST在之前写过一遍文章了,包含详细的推导。简单介绍一下值得注意的地方
链接:https://blog.csdn.net/weixin_45232469/article/details/98467350
关键词:

1.拟合的是泰勒展开逼近的残差(伪残差)
2. 正则项引入模型复杂度
3. 用到二阶导数信息,挖掘更多的关于梯度的信息。
4. 学习随机森林的列抽样
5. 可以在并行运算
6. (当然并不是树模型意义上并行,毕竟是基于t-1颗树的预测才能得到第t棵树。 这里指的是XGBoost在训练前已经对数据进行了排序,所以在构建一棵树时,可以并行计算所有节点分裂时,每个特征带来的增益。)
7. 采用Gain指数计算增益。
(用语言描述就是:计算分裂点左边每个叶节点一阶导数的和除以二阶导数的和一个常数值,同理第二项和第三项,第四项的常数是阈值,用来剪枝。)各种树模型细节比较(分类树,回归树,随机森林,gbdt, xgboost)_第2张图片

你可能感兴趣的:(机器学习)