目录概述梯度提升树方差与泛化误差结论重要参数subsample重要参数eta概述XGBoost全称是eXtremeGradientBoosting可译为 目录 概述 梯度提升树 方差与泛化误差 结论 重要参数subsample 重要参数e
目录概述梯度提升树方差与泛化误差结论重要参数subsample重要参数eta概述XGBoost全称是eXtremeGradientBoosting可译为
目录
概述
梯度提升树
方差与泛化误差
结论
重要参数subsample
重要参数eta
概述 XGBoost全称是eXtreme Gradient Boosting可译为极限梯度提升算法。它由陈天奇所设计致力于让提升树突破自身的计算极限以实现运算快速性能优秀的工程目标。和传统的梯度提升算法相比XGBoost进行了许多改进 它能够比其他使用梯度提升的集成算法更加快速并且已经被认为是在分类和回归上都拥有超高性能的先进评估器。
梯度提升树 XGBoost的基础是梯度提升算法因此我们必须先从了解梯度提升算法开始。梯度提升Gradient boosting是构建预测模型的最强大技术之一它是集成算法中提升法Boosting的代表算法。 之前学习的随机森林是集成算法中袋装法的代表。 集成算法通过在数据上构建多个弱评估器汇总所有弱评估器的建模结果以获取比单个模型更好的回归或分类表现。弱评估器被定义为是表现至少比随机猜测更好的模型即预测准确率不低于50%的任意模型。 集成不同弱评估器的方法有很多种。有像我们曾经在随机森林的课中介绍的一次性建立多个平行独立的弱评估器的装袋法。也有像提升法这样逐一构建弱评估器经过多次迭代逐渐累积多个弱评估器的方法。提升法的中最著名的算法包括Adaboost和梯度提升树XGBoost就是由梯度提升树发展而来的。梯度提升树中可以有回归树也可以有分类树两者都以CART树算法作为主流XGBoost背后也是CART树(classification and regression tree)分类回归树算法这意味着XGBoost中所有的树都是二叉的。 梯度提升回归树是专注于回归的树模型的提升集成模型其建模过程大致如下最开始先建立一棵树然后逐渐迭代每次迭代过程中都增加一棵树逐渐形成众多树模型集成的强评估器。 方差与泛化误差
在机器学习中我们用来衡量模型在未知数据上的准确率的指标叫做泛化误差Genelization error。 在过去我们往往直接取学习曲线获得的分数的最高点即考虑偏差最小的点是因为模型极度不稳定方差很大的情况其实比较少见。但现在我们的数据量非常少模型会相对不稳定因此我们应当将方差也纳入考虑的范围。在绘制学习曲线时我们不仅要考虑偏差的大小还要考虑方差的大小更要考虑泛化误差中我们可控的部分。 结论
XGB中的树的数量决定了模型的学习能力树的数量越多模型的学习能力越强。只要XGB中树的数量足够了即便只有很少的数据 模型也能够学到训练数据100%的信息所以XGB也是天生过拟合的模型。 XGB中树的数量很少的时候对模型的影响较大当树的数量已经很多的时候对模型的影响比较小只能有微弱的变化。当数据本身就处于过拟合的时候再使用过多的树能达到的效果甚微反而浪费计算资源。 树的数量提升对模型的影响有极限最开始模型的表现会随着XGB的树的数量一起提升但到达某个点之后树的数量越多模型的效果会逐步下降这也说明了暴力增加n_estimators不一定有效果。 重要参数subsample
集成的目的是为了模型在样本上能表现出更好的效果所以对于所有的提升集成算法每构建一个评估器集成模型的效果都会比之前更好。也就是随着迭代的进行模型整体的效果必须要逐渐提升最后要实现集成模型的效果最优。要实现这个目标我们可以首先从训练数据上着手。 在无论是装袋还是提升的集成算法中有放回抽样都是我们防止过拟合让单一弱分类器变得更轻量的必要操作。实际应用中每次抽取50%左右的数据就能够有不错的效果了。sklearn的随机森林类中也有名为boostrap的参数来帮助我们控制这种随机有放回抽样。同时这样做还可以保证集成算法中的每个弱分类器每棵树都是不同的模型基于不同的数据建立的自然是不同的模型而集成一系列一模一样的弱分类器是没有意义的。 在梯度提升树中我们每一次迭代都要建立一棵新的树因此我们每次迭代中都要有放回抽取一个新的训练样本。不过这并不能保证每次建新树后集成的效果都比之前要好。因此我们规定在梯度提升树中每构建一个评估器都让模型更加集中于数据集中容易被判错的那些样本。 首先我们有一个巨大的数据集在建第一棵树时我们对数据进行初次又放回抽样然后建模。建模完毕后我们对模型进行一个评估然后将模型预测错误的样本反馈给我们的数据集一次迭代就算完成。紧接着我们要建立第二棵决策树于是开始进行第二次又放回抽样。但这次有放回抽样和初次的随机有放回抽样就不同了在这次的抽样中我们加大了被第一棵树判断错误的样本的权重。也就是说被第一棵树判断错误的样本更有可能被我们抽中。 基于这个有权重的训练集来建模我们新建的决策树就会更加倾向于这些权重更大的很容易被判错的样本。建模完毕之后我们又将判错的样本反馈给原始数据集。下一次迭代的时候被判错的样本的权重会更大新的模型会更加倾向于很难被判断的这些样本。如此反复迭代越后面建的树越是之前的树们判错样本上的专家越专注于攻克那些之前的树们不擅长的数据。对于一个样本而言它被预测错误的次数越多被加大权重的次数也就越多。我们相信只要弱分类器足够强大随着模型整体不断在被判错的样本上发力这些样本会渐渐被判断正确。如此就一定程度上实现了我们每新建一棵树模型的效果都会提升的目标。 那除了让模型更加集中于那些困难样本采样还对模型造成了什么样的影响呢采样会减少样本数量而从学习曲线来看样本数量越少模型的过拟合会越严重因为对模型来说数据量越少模型学习越容易学到的规则也会越具体越不适用于测试样本。所以subsample参数通常是在样本量本身很大的时候来调整和使用。 重要参数eta
从数据的角度而言我们让模型更加倾向于努力攻克那些难以判断的样本。但是并不是说只要我新建了一棵倾向于困难样本的决策树它就能够帮我把困难样本判断正确了。困难样本被加重权重是因为前面的树没能把它判断正确所以对于下一棵树来说它要判断的测试集的难度是比之前的树所遇到的数据的难度都要高的那要把这些样本都判断正确会越来越难。如果新建的树在判断困难样本这件事上还没有前面的树做得好呢如果我新建的树刚好是一棵特别糟糕的树呢所以除了保证模型逐渐倾向于困难样本的方向我们还必须控制新弱分类器的生成我们必须保证每次新添加的树一定得是对这个新数据集预测效果最优的那一棵树。 "eta"是迭代决策树时的步长shrinkage又叫做学习率learning rate。和逻辑回归中的 类似 越大迭代的速度越快算法的极限很快被达到有可能无法收敛到真正的最佳。 越小越有可能找到更精确的最佳值更多的空间被留给了后面建立的树但迭代速度会比较缓慢。