「GBM 和 XGBoost 之间有什么卧槽的区别?」
「GBM和XGBoost有什么区别?」
我相信每个人都知道GBM和XGBoost这两种算法。它们是许多实际应用和竞赛中的首选算法,因为其输出指标通常优于其他模型。
对于那些不了解GBM和XGBoost的人来说,GBM(梯度提升机)和XGBoost(极端梯度提升)都是集成学习方法。集成学习是一种机器学习技术,其中多个“弱”模型(通常是决策树)被训练并组合以进行进一步的目的。
该算法基于其名称中显示的集成学习提升技术。提升技术是一种方法,试图将多个弱学习器按顺序组合起来,每个学习器都纠正其前一个学习器的错误。每个学习器将从它们先前的错误中学习,并纠正先前模型的错误。
这是GBM和XGB之间的根本相似之处,但它们之间有什么区别呢?我们将在本文中讨论这个问题,让我们进入其中。
GBM(梯度提升机)
正如上面提到的,GBM是基于提升的,它尝试顺序迭代弱学习器,从错误中学习并开发出稳健的模型。GBM通过使用梯度下降最小化损失函数来为每次迭代开发更好的模型。梯度下降是一种概念,通过每次迭代(例如损失函数)寻找最小函数的方法。迭代将继续进行,直到满足停止准则为止。
对于GBM的概念,您可以在下面的图像中看到。
您可以看到上面的图像中,对于每次迭代,模型都会尝试最小化损失函数并从先前的错误中学习。最终的模型将是将所有模型的预测相加得到的整个弱学习器。
XGB(极端梯度提升)以及它与GBM的区别
XGBoost或极端梯度提升是一种基于梯度提升算法开发的机器学习算法,由Tiangqi Chen和Carlos Guestrin于2016年开发。在基本层面上,该算法仍然遵循顺序策略,根据梯度下降改进下一个模型。然而,XGBoost的一些差异使得它成为性能和速度方面最好的模型之一。
1. 正则化
正则化是机器学习中避免过拟合的一种技术。它是一组用于约束模型的方法,以避免其变得过于复杂并具有糟糕的泛化能力。由于许多模型很好地拟合训练数据,所以这成为一种重要的技术。
GBM在其算法中不实现正则化,这使得算法仅专注于实现最小损失函数。与GBM相比,XGBoost实现了正则化方法来惩罚过拟合的模型。
XGBoost可以应用两种正则化方法:L1正则化(套索)和L2正则化(岭)。L1正则化试图将特征权重或系数最小化为零(有效地成为特征选择),而L2正则化试图均匀缩小系数(有助于处理多重共线性)。通过同时实施这两种正则化方法,XGBoost可以比GBM更好地避免过拟合。
2. 并行化
GBM的训练时间比XGBoost要慢,因为后者在训练过程中实现了并行化。提升技术可能是顺序的,但是XGBoost过程中仍然可以进行并行化。
并行化旨在加速树构建过程,尤其是在分裂事件期间。通过利用所有可用的处理核心,XGBoost的训练时间可以缩短。
说到加速XGBoost过程,开发者还将数据预处理为他们开发的数据格式DMatrix,以提高内存效率和训练速度。
3. 缺失数据处理
我们的训练数据集可能包含缺失数据,我们必须在将其传入算法之前明确处理。然而,XGBoost具有自己内置的缺失数据处理程序,而GBM却没有。
XGBoost实现了处理缺失数据的技术,称为稀疏感知拆分查找。对于XGBoost遇到的任何稀疏数据(缺失数据、密集零、OHE),模型将从这些数据中学习并找到最优的拆分方式。模型会在拆分过程中确定缺失数据的位置,并查看哪个方向能够最小化损失。
4. 树剪枝
GBM的增长策略是在算法达到负损失时停止拆分。这种策略可能会导致次优结果,因为它只基于局部优化,可能忽视整体情况。
XGBoost试图避免GBM的策略,并在集合参数最大深度开始向后剪枝之前树生长。带有负损失的拆分会被剪枝,但存在一种情况,负损失的拆分未被移除。当拆分达到负损失时,但进一步的拆分是正的,如果整体拆分是正的,它仍然会被保留。
5. 内置交叉验证
交叉验证是一种通过在几次迭代中系统地拆分数据来评估模型的泛化能力和稳健性的技术。综合而言,它们的结果将显示模型是否过拟合。
通常情况下,机器算法需要外部帮助来实施交叉验证,但XGBoost具有内置的交叉验证功能,可以在训练会话中使用。交叉验证将在每次提升迭代中执行,并确保生成的树稳健。
结论
GBM和XGBoost是许多现实案例和竞赛中流行的算法。从概念上讲,它们都是利用弱学习器来获得更好模型的增强算法。然而,在算法实现方面,它们之间存在一些差异。XGBoost通过嵌入正则化、执行并行化、更好地处理缺失数据、不同的树剪枝策略以及内置的交叉验证技术等方面增强了算法。
[Cornellius Yudha Wijaya](https://www.linkedin.com/in/cornellius-yudha-wijaya/)是一名数据科学助理经理和数据作家。在全职工作于Allianz Indonesia的同时,他喜欢通过社交媒体和写作媒体分享Python和数据技巧。