随机森林RF、GBDT、XGBoost的区别

1. 随机森林

1.1 定义

        RF是一个用随机方式建立的,包含多个决策树的集成分类器,其输出类别由各个树投票而定(回归树取平均)。

1.2 生成过程

假设样本总数为n,特征数为a。

1. 从原始样本中采用有放回抽样(bagging)的方法选取n个抽样。

2. 对n个样本选取a个特征中的随机k个,用于建立决策树的方法,获得最佳分割点。

3. 重复m次,获得m棵决策树。

4. 对输入样例进行预测时,每个子树都产生一个结果,采用多数投票机制输出。

1.3 优点

1. 实现简单,训练速度快,泛化能力强,可并行实现。(因为训练时树与树之间是相互独立的)。

2. 相比单一决策树,能学习到特征之间的相互影响,且不易过拟合。

3. 能处理高维数据,并且不用做特征选择,因为特征子集是随机选取的。

4. 对于不平衡的数据集,可以平衡误差。

5. 相比SVM,不是很怕特征缺失(待选特征也是随机选取的)。

6. 训练完后可以给出哪些特征比较重要。

1.4 缺点

1. 在噪音过大的分类和回归问题,还是容易过拟合。

2. 相比单一决策树,它的随机性让我们难以对模型进行解释。

2. 梯度提升树GBDT

2.0 boosting算法

      一般boosting算法都是一个迭代过程,每一次的训练都是为了改进上一次的结果。算法原理:

1. 训练一个模型m1,产生错误e1;

2. 针对e1训练一个模型m2,产生错误e2;

3. 针对e2训练第三个模型m3,产生错误e3 .....;

4. 最终预测结果是:m1+m2+m3+.....

2.1 原理

      gbdt是以决策树(回归树)为基学习器的迭代boosting算法。主要思想:

    (1)每一次建立单个分类器时,是在之前建立的模型的损失函数的梯度下降方向;

            损失函数越大,说明模型越容易出错,如果我们的模型能让损失函数持续的下降,则说明我们的模型在持续不断的改进,而最好的方式就是让损失函数在其梯度的方向上下降。

   (2)GBDT的核心在于每一棵树学的是之前所有树结论和的残差

            残差就是真实值与预测值的差值,为了得到残差,GBDT中的树全部是回归树,而不是分类树。

    (3)Shrinkage(缩减) 是 GBDT 的一个重要演进分支;

            Shrinkage的思想在于每次走一小步来逼近真实的结果,比直接迈大步的方式好; Shrinkage可以有效减少过拟合的风险。它认为每棵树只学到了一小部分,累加的时候只累加这一小部分,通过多学习几棵树来弥补不足。这累加的一小部分(步长*残差)来逐步逼近目标,所以各个树的残差是渐变的而不是陡变的。

2.2 优点

1. 适用面广,可以灵活的处理各种类型的数据(离散|连续的数据都可以处理);

2. 几乎可用于所有回归问题(线性|非线形),亦可用于二分类(设置阈值);

3. 在相对较少的调参时间下,预测的准确度较高;

4. GBDT每一次的残差计算都增大了分错样本的权重,而分对的权重都趋近于0,因此泛化性能比较好。

2.3 缺点

1. 由于弱分类器的串行依赖,难以并行训练数据;

2. 对异常值比较敏感。

2.4 GBDT与RF的区别

相同点:都是由多棵树构成,最终的结果也是由多棵树决定。

bagging与boosting都来源于Booststrap思想(有放回抽样)。

                      RF                      GBDT
1基于思想baggingboosting
2采样方式有放回的均匀取样根据错误率取样(分类精度比较高)
3训练集选择随机的,各训练集之间相互独立其选择与前一轮结果有关
4训练方式弱分类器可并行,练速度相对较快串行(生成)
5组成回归树|分类树回归树(分类树的结果无法累加)
6输出结果多数投票(或简单平均)将所有结果累加或加权累加
7异常值不敏感非常敏感
8提高性能方法减少模型方差减少模型偏差
9对训练集一视同仁由基于权值的弱分类器集成
10

3. XGBoost(eXtreme GB)

3.1 定义

        XGB原理与GBDT相同,是大规模、分布式的通用梯度提升(GBDT)库,它在GB框架下实现了GBDT和一些广义线性ML算法。它是经过优化的分布式梯度提升库,旨在高效、灵活且可移植,比GBDT更高效。

3.2 特点

1. 还支持线性分类器

GBDT以回归树作为基学习器;

XGB还支持线性分类器,此时XGB相当于带有L1和L2正则化的LR(分类)或线性回归。

2. 对损失函数进行二阶泰勒展开

GBDT优化时只用到一阶导数信息;而XGB优化时同时用到一阶、二阶导数信息。

XGB还支持自定义的代价函数,但次代价函数需要一阶、二阶可导。

3. XGB在代价函数中加入了正则项,用于控制模型复杂度

正则项中包含了树的叶子结点个数、每个叶子结点上输出的score的L2模的平方和。

从平衡方差、偏差角度来看,降低了方差,使学习出来的模型更加简单,防止过拟合。

这是XGB优于GBDT的一个特性。

4. XGB的权重衰减(eta shrinkage)      <=> \eta

XGB在进行完一次迭代后,会将叶子结点的权重*该系数,主要是为了削弱每棵树的影响,让后面的树有更大的学习空间(给后面的树提供空间优化模型)。

一般把eta设置越小,迭代次数越多。

5. XGB支持列抽样

借鉴了RF的做法,支持列抽样,不仅能降低过拟合,还能减少计算。

对缺失值处理(对特征有缺失的样本,可自动学习出它的分裂方向)。

列抽样防止过拟合的效果比行抽样还好,也有利于后面的并行化处理算法。

这也是XGB优于GBDT的一个特性。

6. 支持并行

不是树粒度的并行,(XGB也是一次迭代完才进行下一次迭代的,第t次迭代的代价函数里面包含了前面t-1次迭代的预测值),而是特征粒度上的。

DT学习最耗时的一个步骤就是对特征值进行排序(确定最佳分割点),xgb在训练前预先对数据进行了排序,并保存为block结构,之后的迭代中重复使用之,大大减少了计算量。

在进行结点的分裂时,需要计算每个特征的增益,最终选择增益最大的那个特征去做分裂,这样,各个特征增益的计算就可以多线程进行。

7. 内置交叉验证

接着已有模型学习,高灵活性、高速缓存压缩感知算法。

8. 切分点查找算法

1. 贪心算法获取最优切分点;

2. 近似算法;

3. 分布式加权直方图算法。

3.3 与GDBT的区别

(1)XGB生成CART树时考虑了树的复杂度;GDBT生成时未考虑,而是在树的剪枝步骤中考虑了树的复杂度。

(2)XGB是拟合上一轮损失函数的二阶导展开,GDBT是拟合上一轮损失函数的一阶导展开,因此,XGB的准确性更高,且满足相同的训练效果,需要的迭代次数更少。

(3)XGB与GDBT都是逐次迭代来提高模型性能,但是XGB在选取最佳切分点时可以开启多线程进行,大大提高了运行速度。

3.4 损失函数

1. xgboost 优化目标函数:

 2. loss function满足泰勒展开的条件:

变化为 

其中 f(x) = l(y_{i},\hat{y}_{i}^{t-1}),即当前样本i真实值与t-1轮预测值的差,这是个常数项

并且

可以看出来g_{i}h_{i}与t轮(当前轮无关),是常数。g为f(x)在x=x_0处的导数,f(x)是已知函数。

以平方损失函数为例:

Loss = \sum_{i=1}^{n}(y_{i}-(\hat{y}_{i}^{t-1}+f_{t}(x_{i})))^{2},对应的f(x) = (y_{i}-\hat{y}_{i}^{t-1})^2

g=\partial f(x) /\partial \hat{y}^{t-1} = 2(\hat{y}^{t-1} - y_{i}), h = 2 (g、h都为常数)。

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值