🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/
集成学习是一种强大的机器学习范式,它通过构建并结合多个学习器来提高预测性能。其中,随机森林、AdaBoost 和 XGBoost 是集成学习领域中著名且广泛应用的方法。尽管这些方法共享一些基本概念,但它们在算法原理、损失函数、优化方法、应用场景以及优缺点等方面存在显著差异。
算法原理
随机森林是一种基于决策树的集成学习方法(Bagging)。它通过并行构建许多决策树,并对这些树的预测结果进行平均或多数投票,来得出最终预测。随机森林引入了两个关键的随机性元素:一是在训练每棵树时采用不同的数据样本(数据随机:通过自助采样法),二是在分裂节点时考虑随机选取的特征子集(特征随机)。
Boosting 方法背后的直观理念是,我们需要串行地训练模型,而非并行。每个模型都应专注于之前弱学习器表现不佳的样本区域。相较于随机森林中各决策树的相互独立性,AdaBoost 展现出一种顺序训练的级联结构。在 AdaBoost 中,后续模型的训练基于前一个模型的预测结果,形成依赖关系。这种级联方式使 AdaBoost 更专注于解决之前未能正确预测的样本,逐步优化预测性能。AdaBoost 充分考虑了每个弱学习器的发言权,不同于随机森林的简单投票或计算平均值。AdaBoost 的核心思想在于:每一轮迭代后更新样本权重和弱学习器权重。
XGBoost(eXtreme Gradient Boosting)是梯度提升算法的高效实现。该算法利用梯度提升框架,在每次迭代过程中添加新树以纠正先前所有树预测之和与真实标签之间的残差。为了控制模型复杂度并防止过拟合,XGBoost 引入了正则项。
损失函数和优化
随机森林通常使用的 CRAT 树(分类回归树),指导模型学习过程的是决策树的划分准则,如基尼不纯度和信息增益(分类)、均方误差和平均绝对误差(回归)。随机森林致力于降低模型整体的方差,进而提高预测准确性。随机森林通过增加树的数量和引入随机性来优化模型的表现。没有显式的迭代优化过程。
AdaBoost 使用加权指数损失函数进行优化。通过迭代地增加对错误预测样本的关注度(调整样本权重)并添加新的弱学习器以及调整弱学习器权重来减少总体模型误差。
XGBoost 允许用户自定义损失函数,并且已内置了多种损失函数,适用于回归、分类等多样化任务。优化的核心在于利用损失函数的一阶导数(即梯度)和二阶导数(即海森矩阵)。XGBoost 的核心作者陈天奇为什么用二阶泰勒展开呢?
-
XGBoost 之所以采用二阶泰勒展开,是为了能够自定义损失函数,提高算法的可扩展性,使其能够近似大量的损失函数,从而支持回归、分类和排名任务。只要损失函数是二阶可导的,就可以利用陈天奇关于目标函数的推导,实现代码的复用。泰勒展开式的本质在于尽可能地近似一个函数,二阶泰勒展开已经足够近似许多损失函数,例如基于分类的对数似然损失函数。这样一来,使用相同的代码就能完成回归或分类任务,无需每次都重新推导和编写训练代码。
-
一阶导指示梯度方向,而二阶导则揭示了梯度方向如何变化,类似牛顿法比 SGD 收敛更快,二阶导信息可以使得梯度收敛更加快速和精确。XGBoost 通过采用二阶泰勒展开直接求解最优化问题,有效避免了 GBDT 采用一阶泰勒展开时所需的 “打补丁” 方法,这凸显了 XGBoost 在模块化设计上的显著优势。
XGBoost 采用类似梯度下降的方式更新模型参数(所以有个学习率参数 eta
),并通过列抽样、行抽样等策略进一步提升计算效率和减少过拟合风险。在寻找最优特征方面,XGBoost 通过给特征打分来确定其重要性,采用无放回的样本选择方式以避免梯度优化时的重复抽样问题,支持子采样以提高模型训练的效率。
应用场景、优点与不足
随机森林适用于分类和回归任务,特别是在具有高维特征且模型解释性要求不严格的情况下。
优点:准确性高;抑制过拟合;能处理大量的特征和数据;能处理缺失值;多功能性;易于使用
不足:模型复杂度高;模型可解释性不佳;对噪声敏感
AdaBoost 适用于二分类问题和多类别问题(通过一对多策略)。尤其在解决有明显复杂决策边界问题时效果良好。
优点:准确性高;易于代码实现;自动处理特征选择;灵活性;不太容易过拟合
不足:噪声敏感性;计算量较大
XGBoost 非常适合于各种规模数据集上的分类、回归和排名任务。特别是在竞赛和工业界项目中广受欢迎。
优点:准确性高;抑制过拟合;能处理大量的特征和数据;能处理缺失值;多功能性;易于使用;运行速度快,效果好;可以处理缺失数据;支持自定义损失函数;具有良好的扩展性和灵活性。
不足:参数较多,调参复杂;在某些噪音较大或数据量较小情况下容易过拟合。
总结来说,这三种算法各具特点:随机森林强调简单性、通用性和稳健性;AdaBoost 注重逐步提升模型准确性并增强弱学习器;而 XGBoost 则专注于高效、灵活和广泛的适应性。具体选择哪种算法,需根据任务需求、数据特性和计算资源等因素综合考虑。
📚️ 相关链接:
-
XGBoost Documentation
-
sklearn.ensemble: Ensemble Methods