社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

10分钟快速了解机器学习核心算法-Gradient Boosting梯度提升!

人工智能学习指南 • 7 月前 • 228 次点击  

本文将深入探讨梯度提升(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在内的多个强大框架奠定了基础。

这些库因其优化和可扩展性而被各个领域广泛采用,适用于大型数据集,能够训练数百甚至数千个模型来构建强大的集成模型。


另外我还给大家准备了一些机器学习、深度学习、神经网络资料大家可以看看以下文章(文章中提到的资料都打包好了,都可以直接添加小助手获取)

<


 人工智能资料分享 



>








零基础学习路线(点击图片即可跳转)











深度学习中文教程书(点击图片即可跳转)


神经网络学习资料(点击图片即可跳转)


大家觉得这篇文章有帮助的话记得分享给你的死党闺蜜、同学、朋友、老师、敌蜜!

B站:AI秃秃学长小墨



关注小墨

获取最新AI技能+最肝AI干货

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/176094
 
228 次点击