之Xgboost算法,xgboost算法( 二 )


首要的问题一直都是:增加模型的复杂度是否更好?而答案也总是与模型自身的泛化性能有关 。如下图 1 所示,我们也许可以在模型更加复杂的同时得到更好的表现(避免欠拟合),但我们也会失去泛化性能(过拟合):图 1:泛化性能 vs 训练误差(仅)为平方损失使用预期条件风险的经典的偏置-方差分解(bias-variance decomposition),我们可以观察风险相对于复杂度的变化:图 2:预期风险 vs 方差 vs 偏置为此通常使用的一种技术是正则化(regularization) 。
通过隐式和显式地考虑数据的拟合性和不完善性,正则化这种技术可以控制拟合的方差 。它也有助于模型具备更好的泛化性能 。不同的模型类测量复杂度的方法也不一样 。LASSO 和 Ridge(Tikhonov regularization)是两种常用于线性回归的测量方法 。我们可以将约束(子集化、步进)或惩罚(LASSO、Ridge)直接应用于复杂度测量 。
理解 boosting、树方法和树提升boostingboosting 是一种使用多个更简单的模型来拟合数据的学习算法,它所用的这些更简单的模型也被称为基本学习器(base learner)或弱学习器(weak learner) 。其学习的方法是使用参数设置一样或稍有不同的基本学习器来自适应地拟合数据 。
Freund 和 Schapire (1996) 带来了第一个发展:AdaBoost 。实际上 AdaBoost 是最小化指数损失函数,并迭代式地在加权的数据上训练弱学习器 。研究者也提出过最小化对数损失的二阶近似的新型 boosting 算法:LogitBoost 。Breiman (1997a,b 1998) 最早提出可以将 boosting 算法用作函数空间中的数值优化技术 。
这个想法使得 boosting 技术也可被用于回归问题 。这篇论文讨论了两种主要的数值优化方法:梯度提升和牛顿提升(也被称为二阶梯度提升或 Hessian boosting,因为其中应用了 Hessian 矩阵) 。让我们一步一步了解 boosting 算法:boosting 拟合同一类的集成模型(ensemble model):其可以被写成自适应基函数模型: 其中 且,m=1,…,M,Φm 是按顺序累加的基本函数,可用于提升当前模型的拟合度 。
因此,大多数 boosting 算法都可以看作是在每次迭代时或准确或近似地求解 所以,AdaBoost 就是为指数损失函数求解上述等式,其约束条件为:Φm 是 A={-1,1} 的分类器 。而梯度提升或牛顿提升则是为任意合适的损失函数近似求解上述等式 。梯度提升和牛顿提升的算法如下:最常用的基本学习器是回归树(比如 CART),以及分量形式的线性模型(component-wise linear model)或分量形式的平滑样条(component-wise smoothing spline) 。
基本学习器的原则是要简单,即有很高的偏置,但方差很低 。boosting 方法中的超参数有:1. 迭代次数 M:M 越大,过拟合的可能性就越大,因此需要验证集或交叉验证集 。2. 学习率 η :降低学习率往往会改善泛化性能,但同时也会让 M 增大,如下图所示 。在 Boston Housing 数据集上的不同学习率的样本外(out-of-sample)RMSE树方法树模型是简单和可解释的模型 。
它们的预测能力确实有限,但将多个树模型组合到一起(比如 bagged trees、随机森林或在 boosting 中),它们就可以变成一种强大的预测模型 。我们可以将树模型看作是将特征空间分割成几个不同的矩形和非重叠区域集合,然后它可以拟合一些简单的模型 。下图给出了使用 Boston Housing 数据得到的可视化结果:终端节点的数量和树的深度可以看作是树模型的复杂度度量 。
为了泛化这种模型,我们可以在复杂度度量上轻松地应用一个复杂度限制,或在终端节点的数量或叶权重的惩罚项上应用一个惩罚(XGBoost 使用的这种方法) 。因为学习这种树的结构是 NP 不完全的,所以学习算法往往会计算出一个近似的解 。这方面有很多不同的学习算法,比如 CART(分类和回归树)、C4.5 和 CHAID 。

推荐阅读