①XGBoost损失函数是误差部分是二阶泰勒展开,GBDT 是一阶泰勒展开。因此损失函数近似的更精准。
②XGBoost目标函数中添加了正则项(L1、L2正则项),可以有效的防止过拟合
③XGBoost可以自定义目标函数objective,因此更加灵活
④XGBoost可以自定义评估指标eval_metric
⑤XGBoost除了可以进行样本抽样,还实现了特征抽样
四个随机抽样特征的参数中(subsample–控制生成每棵树的随机抽样样本比例、colsample_bytree–每次生成树时,随机抽样特征的比例、colsample_bylevel–每次生成树的一层时,随机抽样特征的比例、colsample_bynode–每次生成一个叶子节点时,随机抽样特征的比例),前三个比较常用。在建立树时对特征进行抽样其实是决策树和随机森林中比较常见的 一种方法,但是在XGBoost之前,这种方法并没有被使用到boosting算法当中过。Boosting算法一直以抽取样本 (横向抽样)来调整模型过拟合,而实践证明其实纵向抽样(抽取特征)也能够防止过拟合。
⑥XGBoost实现了并行化处理 :
如何并行化:XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完成才能进行下一次迭代的(第t次迭代的代价函数里 面包含了前面t-1次迭代的预测值)。 XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要 确定最佳分割点)。XGBoost在训练之前,预先对数据进行排序,然后保存block结构,后面的迭代中重复的使用 这个结构,这个block结构也使得并行称为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益 最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行,从而大大减小计算量。
⑦XGBoost具有对缺失值的处理功能:
missing(特征缺失值的处理):如果数据中存在缺失值,XGBoost会将missing该特征值的样本分别分配到左叶子结点和右叶子结点的两种情形, 计算增益(Gain)后,选择增益大的方向进行分裂。 如果在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。
⑧XGBoost具有可并行的近似直方图算法
树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以XGBoost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
XGBoost VS GBDT (二者的区别)
最新推荐文章于 2021-07-20 16:53:03 发布