
本文将深入探讨梯度提升(Gradient Boosting)这一机器学习算法。
它是XGBoost和LightGBM等热门框架的基础,这些框架在多个机器学习竞赛中都获得了很不错的成绩。
这篇文章将从集成学习的基础讲起,通过实例逐步解析梯度提升算法如何进行预测。
集成学习(Ensemble Learning)
集成学习是指通过训练和组合多个模型(通常是弱学习器)来创建一个预测能力更强的强学习器的过程。
实现这一目标的两种主要方法是袋装法(Bagging)和提升法(Boosting)。
1. Bagging
Bagging通过对训练数据进行有放回的抽样,生成不同的子集,然后独立地在这些子集上训练多个弱学习器。回归任务的最终预测结果是各模型预测值的平均值,分类任务则通过多数投票得出。
例如,随机森林就利用袋装法在不同数据子集上训练多个决策树。
袋装法可以降低方差,使最终的集成模型更不容易过拟合。
2. Boosting
提升法是指按顺序训练多个模型,每个模型都从前一个模型的错误中学习,希望不再重复同样的错误。
提升法侧重于减少偏差而非方差,通过迭代“提升”弱学习器来构建最终模型。
提升法最初是从关注训练数据集中难以预测的样本开始的,这是AdaBoost算法的主要思想。
它根据前一个模型是否错误分类样本来调整样本的权重,调整后的样本权重将传递给下一个模型,从而降低整体误差。
但AdaBoost对噪声数据敏感,因为赋予异常值更高的权重可能会导致过拟合。
为了克服AdaBoost的局限性,人们引入了梯度提升。
梯度提升不再重新加权样本,而是关注当前模型的残差误差(即梯度)。
每个新的弱学习器(通常是决策树)都旨在最小化这些残差,从而提高整体模型的准确性。
下面让我们更深入地了解它的工作原理。
梯度提升(Gradient Boosting)
梯度提升是一种机器学习技术,它通过组合多个弱学习器(通常是决策树)来顺序构建强大的集成模型。
它通过在每个弱学习器产生的残差误差(即实际值与预测值之间的差异)上拟合一个新的弱学习器来实现这一点。
在梯度提升中,每个模型都通过最小化损失函数(如回归任务的均方误差或分类任务的对数损失)来纠正前一个模型的错误。
每个模型的预测值通过学习率进行缩放并组合,形成最终的集成模型。
下面是一个梯度提升模型的工作步骤:

假设我们要根据房屋的大小、房间数量、地理位置等特征来预测房屋价格,并且我们的训练数据中只有三个样本,如下所示,其中实际价格是目标变量。

初始化预测:在训练任何模型之前,我们会为所有样本提供一个基线预测,这通常是训练集中目标变量的平均值。
在我们的房屋例子中,平均价格是226,000美元,我们用这个值来初始化预测。

计算残差:在得到每个样本的预测值后,下一步是计算残差,即实际值与预测值之间的差异。这些残差代表了基线预测的错误。

训练弱学习器:在梯度提升中,计算出初始基线预测的残差后,下一步是在这些残差上训练一个弱学习器(如简单的决策树),而不是在实际目标值(即房屋价格)上。
因此,决策树的输入是房屋特征,目标值是前一步预测的残差(对于第一个模型,使用的是基线预测的残差)。

假设弱学习器分别给出每个房屋的预测值为-50,000美元、-20,000美元和80,000美元。
请注意,这些预测值并不完全匹配残差,但旨在减少整体误差,下面我们会看到这是如何实现的。
弱学习器对残差的预测相当于误差修正,它表示在下一步中减少当前误差所需的调整。

更新预测:在弱学习器训练完成后,我们通过加上弱学习器预测值的缩放版本来更新基线预测,即误差修正。
这个缩放因子称为学习率(用α表示),是一个关键的超参数,控制着每个弱学习器对整体模型的贡献程度。
在这个例子中,我们假设学习率为0.1,每次迭代的通用更新规则为:

在这里,y_hat 代表预测值。根据这个规则,我们来更新给定每栋房屋的预测值:

我们注意到,由于弱学习器的比例修正,每栋房屋的预测值都略有调整,更接近实际价格。这说明了学习率在控制每次调整幅度方面的重要作用。
学习率如何影响预测值?学习率越高,更新幅度越大,可能导致“超调”实际值,使模型波动而非平稳收敛。
另一方面,学习率过低则只进行小幅调整,需要更多迭代才能达到准确预测,可能会减慢学习过程。
重复该过程:使用第一个弱学习器更新预测值后,我们重复步骤2至4进行多次迭代。
这包括重新计算残差、在新残差上训练另一个弱学习器,并使用给定的更新规则更新前一次迭代的预测值。
每次迭代都会进一步完善模型,使预测值更接近实际值。
虽然重复该过程对完善模型至关重要,但并不意味着要一直进行下去!
我们需要在某个时刻停止,这个决定可以基于多个因素:
固定迭代次数/估计器数量:通常,我们预先设定一个迭代次数作为超参数,确定将进行多少轮提升。
算法的每次迭代都会训练一个新的弱学习器,专注于纠正前一个学习器留下的残差错误。
误差阈值:一旦残差或整体误差达到足够小的值,训练就可以停止,这表明预测值已非常接近实际值。
无明显改进:另一个常见的停止点是验证集上模型性能停止提升时。这有助于避免过拟合,在模型变得过于复杂之前结束训练过程。
假设我们在模型中创建了5个弱学习器(实际上,这个数量是在使用scikit-learn中的GradientBoostingRegressor时设置的超参数n_estimators)。
当有新房屋出现且我们不知道其价格时,我们的梯度提升模型会从基线预测开始,通常是训练数据的平均价格。
接下来,我们按构建顺序将这个新房屋传递给每个训练好的弱学习器。
每个学习器都学习了数据中模式的独特信息,因此它们会逐一向预测值添加自己的小修正,从而得出最终的价格预测估计值!
以下是我们刚才讨论的示意图。

结论
本文讲解了集成学习的基本知识,这是一种机器学习技术,为包括XGBoost、LightGBM和CatBoost在内的多个强大框架奠定了基础。
这些库因其优化和可扩展性而被各个领域广泛采用,适用于大型数据集,能够训练数百甚至数千个模型来构建强大的集成模型。
另外我还给大家准备了一些机器学习、深度学习、神经网络资料大家可以看看以下文章(文章中提到的资料都打包好了,都可以直接添加小助手获取)
大家觉得这篇文章有帮助的话记得分享给你的死党、闺蜜、同学、朋友、老师、敌蜜!