翻译维基百科介绍
梯度提升算法是一种解决回归和分类问题的机器学习技术,它通过对弱预测模型(比如决策树)的集成产生预测模型。它像其他提升方法一样以分步的方式构建模型,并且通过允许使用任意可微分的损失函数来推广它们。
和其他boost方法一样,梯度提升方法也是通过迭代的方法联合弱”学习者”联合形成一个强学习者。很容易在最小二乘回归中解释算法的原理,最小二乘法回归的目的就是“教”模型F通过将平方误差 (y^−y)2 最小化(平均训练集)来预测形如 y^=F(x) 的值。
在梯度提升的 1≤m≤M 步中,假设已经有一些不完美的模型 Fm (最初可以使用非常弱的模型,它只是预测输出训练集的平均值)。梯度提升算法不改变 Fm ,而是通过增加估计器 h 构建新的模型 Fm+1(x)=Fm(x)+h(x) 来提高整体模型的效果。那么问题来了,如何寻找 h 函数呢?梯度提升方法的解决办法是认为最好的 h 应该使得:
在许多监督学习问题中,都有一个输出变量 y 和一个输入向量 x ,通过联合概率 P(x,y) 可以将两者联系起来。使用一个训练集 (x1,y1),…,(xn,yn) 已知 x 及对应的 y 。学习的目的就是通过最小化一些损失函数 L(y,F(x)) 的期望值,找到 F∗(x) 的近似 F^(x) 。
输入:训练集 {(xi,yi)}ni=1 ,可微损失函数 L(y,F(x)) ,迭代次数M
算法如下:
1. 使用常量初始化模型:
梯度提升算法通常用具有固定大小的决策树(特别是CART树)作为基学习器。对于这种特殊情况,Friedman提出了一种改进梯度提升的方法,提高了每个基学习期的质量。一般梯度提升算法在第m步使用 hm(x) 拟合近似残差。另 Jm 为叶节点的数目。则模型树将空间分为 Jm 个不相交的区域 R1m,…,RJmm ,每个区域的预测值为常量。利用指示函数 I ,对于输入 x ,输出 hm(x) 可以有以下和的形式:
J 代表树终端节点的数目,是可以根据数据集手动调整的方法参数。它控制了模型变量之间的最大相互作用。当 J=2 (决策树桩)时,变量之间不允许有相互作用。 J=3 时,模型可能包括最多两个变量之间的相互作用。
Hastie等人评论认为, 4≤J≤8 时效果很好,预测结果对在这一范围内选择的J相当不敏感,J=2对于一般应用来说是不够的,但是也很少需要取 J≥10 .
(译注:由于译者水平有限,没有完全这段话含义,尤其是相互作用这几句话,希望得到大神指
点,现贴出原文)。
J , the number of terminal nodes in trees, is the method’s parameter which can be adjusted for a data set at hand. It controls the maximum allowed level of interaction between variables in the model. With J=2 (decision stumps), no interaction between variables is allowed. With J=2 the model may include effects of the interaction between up to two variables, and so on.
Hastie et al.[7] comment that typically 4≤J≤8 work well for boosting and results are fairly insensitive to the choice of J in this range, J = 2insufficient for many applications, and J > 10 is unlikely to be required.
拟合训练集太过于接近可能会降低模型的泛化能力。几种所谓的正则化技术通过约束拟合过程来减少这种过拟合效应。一个很自然的正则化参数是梯度提升的迭代次数M(即当基学习器是决策树时,模型中树的数目)。 增加M可减少训练误差,但将其设置得太高可能导致过拟合。 通常通过在单独的验证集上监测误差来选择M的最优值。 除了控制M之外,还可以使用其他一些正则化技术:
梯度提升算法的一个重要部分是收缩正则化,其中包括修改更新规则如下:
引入梯度提升方法不久之后,Friedman提出对该算法的微小修改,想法源于Breiman提出的bagging方法。具体来说,他提出在算法的每一次迭代中,基础学习器应该随机抽取训练集的子样本作为训练集拟合。Friedman观察到这种修改对梯度提升的精度有实质性改善。
子样本大小由常分数 f 决定,代表子样本大小与总样本大小的比值。当f = 1时,算法是确定性的,与前述相同。 较小的 f 则将随机性引入到算法中,作为正则化的一种形式有助于防止过度拟合。同时也能提高该算法的效率,因为在每次迭代时,回归树将拟合较小的数据集。 Friedman的观点认为,对于中小型训练集, 0.5≤f≤0.8 的效果很好。因此,f通常设置为0.5,这意味着训练集的一半用于构建每个基础学习器。
和bagging算法一样,子样本通过评价那些在构建下一个基学习器中没有使用的样本集,可以定义预测性能改进的包外误差(out-of-bag)。 包外估计可以避免需要独立的验证数据集,但往往低估实际性能的提升和最佳迭代次数。
梯度提升树的实现中,还可以通过限制树叶节点中的最小样本数量来进行正则化(该参数在R gbm包中称为n.minobsinnode [10])。 它忽略将导致叶节点包含少于某一阈值数量的训练集实例节点的分裂(译注:也就是预剪枝)。施加此限制有助于减少叶节点预测的方差。
梯度提升树的另一个有用的正则化技术是惩罚学习模型的模型复杂性。模型复杂度可以定义为树中叶子的比例数(译注:比例数?应该是指叶子总数与树数目的比值)。 损失函数加上模型复杂度的罚项对应于修剪后的算法,可以去除一些增加模型复杂度,但对损失函数的降低影响不大的分支。 还可以添加其他类型的正则化,例如 ℓ2 正则化对叶节点值的惩罚,以避免过度拟合。