Boosting、RF、GBDT、XGBoost

  RF、GBDT和XGBoost都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善单个学习器的泛化能力和鲁棒性。 

  根据个体学习器的生成方式,目前的集成学习方法大致分为两大类:
  (1) 个体学习器之间存在强依赖关系、必须串行生成的序列化方法,代表是Boosting;
   (2) 个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表是Bagging和“随机森林”(Random Forest)。

1、Boosting

1.1 原理
  Boosting是将弱学习算法提升为强学习算法的统计学习方法。在分类学习中,Boosting通过反复修改训练数据的权值分布,构建一系列基本分类器(弱分类器),并将这些分类器线性组合,构成一个强分类器,代表性Boosting算法为AdaBoost。
  Adaboost算法特点是通过每次迭代学习一个基本分类器:
   (1)每次迭代中,提高那些被前一轮分类器错误分类数据的权值,降低那些被正确分类的数据的权值
   (2)AdaBoost将基本分类器的线性组合作为强分类器,其中给分类误差率小的基本分类器以大的权值,给分类误差率大的基本分类器以小的权值。
  AdaBoost算法实际是前向分布算法的实现,模型是加法模型,损失函数是指数损失。

2、Bagging与RF(随机森林)

2.1 原理

  Bagging可以简单的理解为:放回抽样,多数表决即简单投票(分类)或简单平均(回归),同时Bagging的基学习器之间属于并列生成,不存在强依赖关系。 与标准AdaBoost只适用与二分类任务不同,Bagging能不经修改地用于多分类、回归等任务。
  Random Forest(随机森林)是Bagging的扩展变体,它在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择,因此可以概括RF包括四个部分:(1)随机选择样本(放回抽样);(2)随机选择特征;(3)构建决策树;(4)随机森林投票(平均)。
   (1)随机选择样本(放回抽样)随机选择样本和Bagging相同, 由于每个基学习器只使用了训练集中约63.2%的样本,剩下约36.8%的样本可用做验证集来对其泛化性能进行“包外估计”。 不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计,它可以在内部进行评估,也就是说在生成的过程中可以对误差进行无偏估计。
   (2)随机选择特征: 随机属性选择是指在决策树的构建中,从样本集的属性集合中随机选择部分属性,然后再从这个子集中选择最优的属性用于划分,这种随机性导致随机森林的偏差会有稍微的增加(相比于单棵不随机树),但是由于随机森林的‘平均’特性,会使得它的方差减小,而且方差的减小补偿了偏差的增大,因此总体而言是更好的模型。
  (As a result of this randomness, the bias of the forest usually slightly increases (with respect to the bias of a single non-random tree) but, due to averaging, its variance also decreases, usually more than compensating for the increase in bias, hence yielding an overall better model.) 
   (3)构建决策树:在构建决策树的时候,RF的每棵决策树都最大可能的进行生长而不进行剪枝;在对预测输出进行结合时,RF通常对分类问题使用简单投票法,回归任务使用简单平均法。 
   (4)随机森林投票(平均)
  RF和Bagging对比:RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目增多,随机森林通常会收敛到更低的泛化误差。随机森林的训练效率也会高于Bagging,因为在单个决策树的构建中,Bagging使用的是‘确定性’决策树,在选择特征划分结点时,要对所有的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集。
2.2 优缺点
  随机森林的优点较多,简单总结:(1)在数据集上表现良好,相对于其他算法有较大的优势(训练速度、预测准确度);(2)能够处理很高维的数据,并且不用特征选择,而且在训练完后,给出特征的重要性;(3)容易做成并行化方法。
  RF的缺点:在噪声较大的分类或者回归问题上会过拟合。

3、GBDT(Gradient Boost Decision Tree)

  提GBDT之前,谈一下Boosting,Boosting是一种与Bagging很类似的技术。不论是Boosting还是Bagging,所使用的多个分类器类型都是一致的。但是在前者当中,不同的分类器是通过串行训练而获得的,每个新分类器都根据已训练的分类器的性能来进行训练。Boosting是通过关注被已有分类器错分的那些数据来获得新的分类器。
  由于Boosting分类的结果是基于所有分类器的加权求和结果的,因此Boosting与Bagging不太一样,Bagging中的分类器权值是一样的,而Boosting中的分类器权重并不相等,每个权重代表对应的分类器在上一轮迭代中的成功度。

3.1 原理
   先讲一下Gradient Boosting与传统的Boosting的不同,传统的Boosting是给每个样本赋一个权值,然后每次分错的样本的权值会增大,分对的样本的权值就会减小,进行M此迭代后,将M个弱分类器组合在一起,组合为一个强分类器,其中分类正确率高的弱分类器的权值比较大,分类正确率低的分类器的权值小。而Gradient Boosting每次迭代的目标是为了减少上一次的残差,在残差减少的梯度(Gradient)方向上建立一个新的模型。也就是说,在Gradient Boosting中,每个新的模型的建立是使之前模型的残差往梯度方向减少,与传统Boost对正确、错误的样本进行加权有着很大的区别。
  GBDT的每一次计算都是为了减少上一次的残差,而为了消除残差,我们可以在残差减小的梯度方向上建立模型,所以说,在Gradient Boosting中,每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方向减少。
  在Gradient Boosting算法中,关键就是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。
  GBDT的会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树)。
3.2 优缺点

  GBDT的性能在RF的基础上又有一步提升,因此其优点也很明显,1、它能灵活的处理各种类型的数据;2、在相对较少的调参时间下,预测的准确度较高。
  当然由于它是Boosting,因此基学习器之前存在串行关系,难以并行训练数据。

4、XGBoost

4.1 原理

  XGBoost的性能在GBDT上又有一步提升,而其性能也能通过各种比赛管窥一二。坊间对XGBoost最大的认知在于其能够自动地运用CPU的多线程进行并行计算,同时在算法精度上也进行了精度的提高。
  由于GBDT在合理的参数设置下,往往要生成一定数量的树才能达到令人满意的准确率,在数据集较复杂时,模型可能需要几千次迭代运算。但是XGBoost利用并行的CPU更好的解决了这个问题。
  其实XGBoost和GBDT的差别也较大,这一点也同样体现在其性能表现上,详见XGBoost与GBDT的区别。

5、区别

5.1 GBDT和XGBoost区别
  1. 传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);
  2. 传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;
  3. XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性;
  4. shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);
  5. 列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过拟合,还能减少计算;
  6. 对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动学习出它的分裂方向;
  7. XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行 的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

6、参考资料

  1. 周志华机器学习
  2. scikit-learn官方文档
  3. 机器学习实战
  4. 李航统计学习方法
  5. wepon大神blog http://wepon.me/
  6. Vico_Men blog http://blog.csdn.net/qq_28031525/article/details/70207918

猜你喜欢

转载自blog.csdn.net/yuxianiu/article/details/79516030