GBDT算法原理深入解析
- 格式:pdf
- 大小:856.81 KB
- 文档页数:6
⼗⼤经典预测算法(九)---GBDT
GBDT⼜叫梯度提升决策树,它也属于Boosting框架。
GBDT核⼼原理如下:
如图所⽰,⽤GBDT预测年龄,第⼀轮,预测到年龄为20,它和真实值之间的残差为10,第⼆轮,GBDT开始预测上⼀轮的残差10,预测结果为6,这⼀轮的残差为4,第三轮,以年龄4为预测⽬标,预测来的值为3,和真实值之间相差1,最后以残差1为预测⽬标,预测结果为1,此时残差为0,预测结束,最后把之前模型预测的结果全部相加,就得到预测的真实值为30岁
所以,GBDT的核⼼原理是先⽤初始值预测⼀颗决策树,得到本轮的残差,即真实值减预测值,然后⽤残差作为下⼀轮决策树的预测对象,这时会再产⽣⼀个残差,再⽤这个残差作为下⼀轮的预测对象,以此循环迭代直到最后⼀轮的预测残差为0或⾮常⼩的时候就停⽌迭代,然后把所有轮的模型预测结果相加得到最终预测结果,GBDT核⼼原理如下图所⽰
GBDT和AdaBoost的异同
相似之处:
都是基于Boosting思想的融合算法
默认的基分类器都是决策树
AdaBoost其实是GBDT的⼀个特例
不同之处:
AdaBoost的基分类器可以选择更多的算法,⽽GBDT只能选决策树
GBDT的模型提升⽅法与AdaBoost不同,AdaBoost是通过不断加强对错判数据的权重学习来提升模型的预测效果,⽽GBDT则是通过不断降低模型误差来(学习残差)的思想来提升模型的预测效果。
GBDT算法原理深入解析GBDT(Gradient Boosting Decision Tree)是一种基于决策树的集成学习方法,由Freidman于1999年提出,并在近年来得到了广泛的应用。
GBDT通过串行训练多个弱分类器(决策树),并通过迭代的方式不断优化模型的预测结果,最终得到一个强大的预测模型。
GBDT的核心原理可以简述为以下几个步骤:1.初始化:将所有样本的权重初始化为相等值,并选择一个初始的弱分类器作为基学习器。
2.计算残差:根据当前的模型预测值与真实值的差异,计算残差。
这里的残差可以理解为当前模型预测的错误。
3. 拟合残差:使用残差作为目标值,通过训练一个新的弱分类器去拟合这些残差。
这个新的弱分类器被称为Boosting弱学习器,它的输出结果会修正之前模型的预测值。
4.更新模型:将新训练的弱分类器加入到模型中,并通过更新样本权重来调整模型预测的偏差。
样本权重会根据预测错误的程度进行调整,即让之前预测错误的样本在后续的训练中获得更大的权重。
5.迭代训练:通过重复步骤3和4,不断拟合残差并更新模型,构建出一个由多个弱分类器组成的强分类器。
每个弱分类器都在尽可能修正之前模型的预测错误,并最小化整体模型的损失函数。
6.终止条件:当达到设定的迭代次数,或者当模型的性能无法继续提升时,结束训练过程。
7.最终结果:将多个弱分类器的预测结果加权求和,得到最终的预测结果。
这里的权重可以视为每个弱分类器对模型的贡献程度,通常是根据每个弱分类器的训练误差来计算。
此外,GBDT还存在一些常见的改进方法,如XGBoost和LightGBM。
XGBoost(Extreme Gradient Boosting)在GBDT的基础上增加了一些算法细节的创新,如损失函数的优化、正则化项的添加等,从而提高了模型的精确性和泛化性能。
LightGBM是一种基于GBDT的高效实现,通过使用直方图(Histogram)和基于树的学习算法,大幅度提升了模型的训练速度。
gbdt原理
梯度提升决策树(GBDT)是一种常用的监督学习算法,它是一种集成学习方法,通过集成多个决策树来构建强大的预测模型。
GBDT的原理如下:首先,我们定义一个损失函数,常用的有均方误差(MSE)、平均绝对误差(MAE)等。
然后,我们构建一个初始的决策树模型作为第一个基学习器。
接下来,我们根据定义的损失函数,计算当前模型的预测值与真实值之间的差异,这就是残差。
然后,我们使用这个残差作为新的标签,构建一个新的决策树模型,将其添加到集成模型中。
然后,我们通过迭代的方式,继续计算每个新模型的残差,并构建新的决策树模型,将其添加到集成模型中。
这样,我们不断地优化我们的模型,直到达到预设的迭代次数或停止条件。
最终,通过将每个决策树的预测结果进行累加,我们得到了最终的预测结果。
在预测过程中,GBDT使用加法模型的形式,将每个决策树的预测结果相加得到最终的预测值。
总结来说,GBDT通过迭代地构建决策树模型,并使用残差作为新的标签进行训练,不断优化模型的预测能力。
该算法具有很强的灵活性和鲁棒性,在很多实际问题中都有较好的表现。
GBDT算法梳理1.GBDT(Gradient Boosting Decision Tree)思想 Boosting : 给定初始训练数据,由此训练出第⼀个基学习器; 根据基学习器的表现对样本进⾏调整,在之前学习器做错的样本上投⼊更多关注; ⽤调整后的样本,训练下⼀个基学习器; 重复上述过程 T 次,将 T 个学习器加权结合。
Gradient boosting Gradient boosting是 boosting 的其中⼀种⽅法,它主要的思想是,每⼀次建⽴单个学习器时,是在之前建⽴的模型的损失函数的梯度下降⽅向。
我们知道损失函数(loss function)越⼤,说明模型越容易出错,如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,⽽最好的⽅式就是让损失函数在其梯度(Gradient)的⽅向上下降。
GBDT GBDT是 GB 和 DT(Decision Tree) 的结合,就是当 GB 中的单个学习器为决策树时的情况.决策树分为两⼤类,回归树和分类树。
前者⽤于预测实数值,如明天的温度、⽤户的年龄、⽹页的相关程度;后者⽤于分类标签值,如晴天/阴天/雾/⾬、⽤户性别、⽹页是否是垃圾页⾯。
这⾥要强调的是,前者的结果加减是有意义的,如10岁+5岁-3岁=12岁,后者则⽆意义,如男+男+⼥=到底是男是⼥?GBDT的核⼼就在于,每⼀棵树学的是之前所有树结论和的残差,这个残差就是⼀个加预测值后能得真实值的累加量。
⽐如A的真实年龄是18岁,但第⼀棵树的预测年龄是12岁,差了6岁,即残差为6岁。
那么在第⼆棵树⾥我们把A的年龄设为6岁去学习,如果第⼆棵树真的能把A分到6岁的叶⼦节 如果第⼆棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树⾥A的年龄就变成1岁,继续学。
⽽分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,这点对理解GBDT相当重要 我们通过⼀张图⽚,来说明gbdt的训练过程: gbdt通过多轮迭代,每轮迭代产⽣⼀个弱分类器,每个分类器在上⼀轮分类器的残差基础上进⾏训练。
GBDT算法原理深入解析标签:机器学习集成学习GBM GBDT XGBoost梯度提升(Gradient boosting)是一种用于回归、分类和排序任务的机器学习技术,属于Boosting算法族的一部分。
Boosting是一族可将弱学习器提升为强学习器的算法,属于集成学习(ensemble learning)的范畴。
Boosting方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。
通俗地说,就是“三个臭皮匠顶个诸葛亮”的道理。
梯度提升同其他boosting方法一样,通过集成(ensemble)多个弱学习器,通常是决策树,来构建最终的预测模型。
Boosting、bagging和stacking是集成学习的三种主要方法。
不同于bagging方法,boosting方法通过分步迭代(stage-wise)的方式来构建模型,在迭代的每一步构建的弱学习器都是为了弥补已有模型的不足。
Boosting族算法的著名代表是AdaBoost,AdaBoost算法通过给已有模型预测错误的样本更高的权重,使得先前的学习器做错的训练样本在后续受到更多的关注的方式来弥补已有模型的不足。
与AdaBoost算法不同,梯度提升方法在迭代的每一步构建一个能够沿着梯度最陡的方向降低损失(steepest-descent)的学习器来弥补已有模型的不足。
经典的AdaBoost算法只能处理采用指数损失函数的二分类学习任务,而梯度提升方法通过设置不同的可微损失函数可以处理各类学习任务(多分类、回归、Ranking等),应用范围大大扩展。
另一方面,AdaBoost算法对异常点(outlier)比较敏感,而梯度提升算法通过引入bagging思想、加入正则项等方法能够有效地抵御训练数据中的噪音,具有更好的健壮性。
这也是为什么梯度提升算法(尤其是采用决策树作为弱学习器的GBDT算法)如此流行的原因,有种观点认为GBDT是性能最好的机器学习算法,这当然有点过于激进又固步自封的味道,但通常各类机器学习算法比赛的赢家们都非常青睐GBDT算法,由此可见该算法的实力不可小觑。
GBDT算法原理深入解析标签:机器学习集成学习GBM GBDT XGBoost梯度提升(Gradient boosting)是一种用于回归、分类和排序任务的机器学习技术,属于Boosting算法族的一部分。
Boosting是一族可将弱学习器提升为强学习器的算法,属于集成学习(ensemble learning)的范畴。
Boosting方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。
通俗地说,就是“三个臭皮匠顶个诸葛亮”的道理。
梯度提升同其他boosting方法一样,通过集成(ensemble)多个弱学习器,通常是决策树,来构建最终的预测模型。
Boosting、bagging和stacking是集成学习的三种主要方法。
不同于bagging方法,boosting方法通过分步迭代(stage-wise)的方式来构建模型,在迭代的每一步构建的弱学习器都是为了弥补已有模型的不足。
Boosting族算法的著名代表是AdaBoost,AdaBoost算法通过给已有模型预测错误的样本更高的权重,使得先前的学习器做错的训练样本在后续受到更多的关注的方式来弥补已有模型的不足。
与AdaBoost算法不同,梯度提升方法在迭代的每一步构建一个能够沿着梯度最陡的方向降低损失(steepest-descent)的学习器来弥补已有模型的不足。
经典的AdaBoost算法只能处理采用指数损失函数的二分类学习任务,而梯度提升方法通过设置不同的可微损失函数可以处理各类学习任务(多分类、回归、Ranking等),应用范围大大扩展。
另一方面,AdaBoost算法对异常点(outlier)比较敏感,而梯度提升算法通过引入bagging思想、加入正则项等方法能够有效地抵御训练数据中的噪音,具有更好的健壮性。
这也是为什么梯度提升算法(尤其是采用决策树作为弱学习器的GBDT算法)如此流行的原因,有种观点认为GBDT是性能最好的机器学习算法,这当然有点过于激进又固步自封的味道,但通常各类机器学习算法比赛的赢家们都非常青睐GBDT算法,由此可见该算法的实力不可小觑。
gbdt原理GBDT(Gradient Boosting Decision Tree)是一种集成学习算法,它通过多棵决策树的集成来提高预测准确性。
在GBDT中,每棵树都是基于上一棵树的残差进行训练的,这使得GBDT能够不断迭代地提高模型的预测能力。
本文将详细介绍GBDT的原理及其在机器学习中的应用。
首先,GBDT的核心思想是将多棵决策树进行集成。
在训练过程中,每棵树都试图学习上一棵树的残差,以此来不断改进模型的预测能力。
这种残差学习的方式使得GBDT能够有效地拟合复杂的非线性关系,从而提高模型的泛化能力。
其次,GBDT在训练过程中采用了梯度提升(Gradient Boosting)的方法。
具体来说,每一棵树的训练都是通过最小化损失函数来实现的。
在每一轮迭代中,GBDT都会计算出当前模型对训练样本的残差,然后用一个新的决策树来拟合这些残差,从而不断改进模型的预测能力。
此外,GBDT还采用了加法模型的思想。
在GBDT中,模型的预测结果是多棵树的预测结果的累加。
这种累加的方式使得GBDT能够灵活地拟合不同的数据分布,从而提高模型的适应能力。
在实际应用中,GBDT已经被广泛应用于各种机器学习任务中。
例如,在推荐系统中,GBDT可以用于预测用户对商品的喜好程度;在金融风控领域,GBDT可以用于预测客户的信用风险等。
由于GBDT 具有较强的泛化能力和适应能力,因此在实际应用中取得了很好的效果。
总的来说,GBDT作为一种集成学习算法,通过多棵决策树的集成来提高模型的预测能力。
它采用了梯度提升的方法,通过不断迭代地改进模型来提高预测准确性。
在实际应用中,GBDT已经取得了很好的效果,并被广泛应用于各种机器学习任务中。
希望本文能够帮助读者更好地理解GBDT的原理及其在机器学习中的应用。
gbdt原理
梯度提升(Gradient Boosting,GBDT)是一种机器学习方法,
可用于分类和回归。
它是集成学习中的一种,因此结合了用于确定分
类和回归模型的多种基础学习器或算法,从而提高模型表现情况。
这
些基础学习器通常是决策树,因此GBDT也被称为梯度提升决策树或GBDT。
GBDT的模型是逐个学习器,它们一起工作以准确地预测输出结果。
每个基础学习器都是以一种特定顺序训练的,以帮助模型学习以前未
尝试的解决方案。
方法的一般过程是,第一个基础学习器被训练以尽
可能准确地拟合初始数据,以便捕捉主要的数据特征,然后以次要学
习器继续,以此类推。
每个学习器都提高了模型的准确性,而且由于它们基于梯度,所
以这些可改进量是基于梯度优化方法发现的。
梯度优化方法是对模型
的损失函数进行修正,以减少损失表现,从而改善模型的性能。
所以,GBDT模型相当于在训练之前使用梯度优化技术来拟合基础学习器,以
最小化误差。
总之,GBDT是一种高效的机器学习技术,已被广泛用于预测和分析,并可用于减少拟合数据和改善模型表现。
此外,由于它是逐步叠
加学习器来实现的,因此它可以轻松处理复杂的数据,并能有效地利
用已有的知识来进一步增强学习表现。
GBDT 原理及利用GBDT 构造新的特征2017/05/12 65968 1.1 Gradient Boosting Gradient Boosting 是一种Boosting 的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向。
损失函数是评价模型性能(一般为拟合程度+正则项),认为损失函数越小,性能越好。
而让损失函数持续下降,就能使得模型不断改性提升性能,其最好的方法就是使损失函数沿着梯度方向下降(讲道理梯度方向上下降最快)。
Gradient Boost 是一个框架,里面可以套入很多不同的算法。
1.2 Gradient Boosting Decision Tree 每一次建立树模型是在之前建立模型损失函数的梯度下降方向。
即利用了损失函数的负梯度在当前模型的值作为回归问题提升树算法的残差近似值,去拟合一个回归树。
具体算法算理:GBDT 原理-Gradient Boosting Decision Tree1.3 GBDT 应用-回归和分类GBDT 分类:每一颗树拟合当前整个模型的损失函数的负梯度,构建新的树加到当前模型中形成新模型,下一棵树拟合新模型的损失函数的负梯度。
下面是其在Python 的sklearn 包下简单调用方法。
from sklearn import ensembleclf = ensemble.GradientBoostingClassifier()gbdt_model = clf.fit(X_train, y_train) # Training modelpredicty_x = gbdt_model.predict_proba(test1217_x)[:, 1] # predict: probablity of 1# 包含的参数# loss = loss, learning_rate = learning_rate, n_estimators = n_estimators,# min_samples_split =min_samples_split,# min_samples_leaf = min_samples_leaf,# min_weight_fraction_leaf = min_weight_fraction_leaf,# max_depth = max_depth, init = init, subsample = subsample,# max_features = max_features,# random_state = random_state, verbose = verbose,#max_leaf_nodes = max_leaf_nodes, warm_start = warm_start,# presort = presort GBDT 回归:每一颗树拟合当前整个模型的残差,构建新的树加到当前模型中形成新模型,下一棵树拟合新模型的损失函数的负梯度。
gbdt算法原理
GBDT(梯度提升决策树)是一种迭代的决策树算法,是在传统的决策树学习算法的基础上进行加强的一种方法。
它是一种分类方法,利用弱学习训练生成强学习模型,可以将弱学习算法转化为强算法。
它包括训练和预测过程,用于解决回归问题和分类问题。
GBDT 将一个未知功能建模为一个梯度提升树。
在梯度提升的过程中,每个节点都是一个决策树,对整个训练样本集进行分析,然后决定是否应用当前决策树的节点拆分。
最终,当所有的决策树的节点都被拆分,训练样本集就被分解成由多个决策树组成的一个组合模型。
每棵树试图拟合剩余残差(残差指训练数据与组合模型之间的差值),以使框架残差逐步减少。
优化方式:GBDT 使用了最小均方差(Least Square)法作为它的损失函数。
弱分类器之间迭代中使用了梯度下降优化策略,使它们可以自行调整,使损失函数更小,最后得到最优结果。
组合:由于 GBDT 模型建立的每个树之间无关,因此可以使用 parallel training 来加快模型的训练速度。
GBDT 会根据上一棵树的训练结果,经进一步处理和优化,形成下一棵树,最后再进行组合。
应用:GBDT 非常适用于复杂的非线性数据,同时将几种不同的分类器进行组合,可以构建出一个非常强大而且稳健的分类器。
它被广泛用于推荐系统、特征客户群分类、对照群建模和网络搜索等多个领域。
GBDT算法
GBDT通过多轮迭代,每轮迭代产⽣⼀个弱分类器,其中弱分类器通常选择为CART树,每个分类器在上⼀轮分类器的残差基础上进⾏训练。
对于GBDT算法,其中重要的知识点为:
1、GBDT是梯度下降法从参数空间上升到函数空间的算法
2、其属于集成算法Boosting
3、损失函数的构造
⼀、GBDT损失函数
下⾯对于其损失函数做简单的讲解:
GBDT的模型如下,其中T表⽰每棵树,总共集成了M颗。
其损失函数表⽰:
对于其中的L函数该如何选择,也就是关系到GBDT的损失函数构造问题了。
⼀般来说,对于分类问题,选择对数损失;对于回归问题,选择最⼩⼆乘损失。
⼆、梯度下降
GBDT是梯度下降法从参数空间上升到函数空间的算法,也就是说,他的梯度求导,是关于树函数的。
这也很好理解,通常我们求决策树的损失函数,是为了评价树的质量,⽽不是根据损失函数求参数,因为树的构造不需要损失函数,直接通过信息增益、信息增益率、基尼系数等构造的。
但是N颗树该如何构造,也就是说每棵树需要达到什么样的效果对于GBDT的损失函数最⼩,这才是其梯度下降需要关注的。
GBDT--原来是这么回事(附代码)1. 解释⼀下GBDT算法的过程GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,使⽤的是Boosting的思想。
1.1 Boosting思想Boosting⽅法训练基分类器时采⽤串⾏的⽅式,各个基分类器之间有依赖。
它的基本思路是将基分类器层层叠加,每⼀层在训练的时候,对前⼀层基分类器分错的样本,给予更⾼的权重。
测试时,根据各层分类器的结果的加权得到最终结果。
Bagging与Boosting的串⾏训练⽅式不同,Bagging⽅法在训练过程中,各基分类器之间⽆强依赖,可以进⾏并⾏训练。
1.2 GBDT原来是这么回事GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值,然后下⼀个弱分类器去拟合误差函数对预测值的残差(这个残差就是预测值与真实值之间的误差)。
当然了,它⾥⾯的弱分类器的表现形式就是各棵树。
举⼀个⾮常简单的例⼦,⽐如我今年30岁了,但计算机或者模型GBDT并不知道我今年多少岁,那GBDT咋办呢?它会在第⼀个弱分类器(或第⼀棵树中)随便⽤⼀个年龄⽐如20岁来拟合,然后发现误差有10岁;接下来在第⼆棵树中,⽤6岁去拟合剩下的损失,发现差距还有4岁;接着在第三棵树中⽤3岁拟合剩下的差距,发现差距只有1岁了;最后在第四课树中⽤1岁拟合剩下的残差,完美。
最终,四棵树的结论加起来,就是真实年龄30岁(实际⼯程中,gbdt是计算负梯度,⽤负梯度近似残差)。
为何gbdt可以⽤⽤负梯度近似残差呢?回归任务下,GBDT 在每⼀轮的迭代时对每个样本都会有⼀个预测值,此时的损失函数为均⽅差损失函数,那此时的负梯度是这样计算的所以,当损失函数选⽤均⽅损失函数是时,每⼀次拟合的值就是(真实值 - 当前模型预测的值),即残差。
此时的变量是y',即“当前预测模型的值”,也就是对它求负梯度。
训练过程简单起见,假定训练集只有4个⼈:A,B,C,D,他们的年龄分别是14,16,24,26。
GBDT算法原理以及实例理解写在前面:去年学习GBDT之初,为了加强对算法的理解,整理了一篇笔记形式的文章,发出去之后发现阅读量越来越多,渐渐也有了评论,评论中大多指出来了笔者理解或者编辑的错误,故重新编辑一版文章,内容更加翔实,并且在GitHub上实现了和本文一致的GBDT简易版(包括回归、二分类、多分类以及可视化),供大家交流探讨。
感谢各位的点赞和评论,希望继续指出错误~Github:简介:GBDT 的全称是Gradient Boosting Decision Tree,梯度提升树,在传统机器学习算法中,GBDT算的上TOP3的算法。
想要理解GBDT的真正意义,那就必须理解GBDT中的Gradient Boosting 和Decision Tree分别是什么?1. Decision Tree:CART回归树首先,GBDT使用的决策树是CART回归树,无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树通通都是都是CART回归树。
为什么不用CART分类树呢?因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。
对于回归树算法来说最重要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。
在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签是连续数值,所以再使用熵之类的指标不再合适,取而代之的是平方误差,它能很好的评判拟合程度。
回归树生成算法:输入:训练数据集D:输出:回归树f(x).在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树:(1)选择最优切分变量jj与切分点s,求解遍历变量j,对固定的切分变量j扫描切分点s,选择使得上式达到最小值的对(j,s).(2)用选定的对(j,s)划分区域并决定相应的输出值:。
GBDT算法的原理与应用GBDT(Gradient Boosting Decision Tree)算法是一种基于树模型的迭代学习算法,它通过在多个决策树之间提升模型的表现。
该算法是通过在迭代中逐步减小误差而提高模型精度的。
和随机森林相比,GBDT 算法更加灵活、精度更高,且可以有效处理高维数据和非线性数据。
1. 基本原理GBDT算法基于回归树,通过将多个简单的回归树组合起来,形成一个复杂的模型。
在GBDT算法中,每个回归树的训练都是为了减小前一颗回归树残差的平方和。
首先,建立一个初始的回归树,然后计算该树的残差,在依次生成多颗回归树,每颗回归树都拟合上一颗回归树的残差,然后加起来形成一个新的整体模型。
GBDT 通过责任分配的方式来训练每个决策树,使用步长参数和迭代次数控制逼近过程的速度。
当达到指定的迭代次数或训练误差小于设定阈值时,结束模型训练,输出训练好的模型。
2. 应用场景GBDT算法在广泛的应用领域中均可派上用场。
例如,在金融领域中,它可以用来预测信用风险、股票市场走势、大宗商品价格等;在互联网领域中,它可以用于用户行为预测、广告点击率预测、搜索结果排序等;在医学领域,可以用于癌症早期诊断、药物研发等。
具体的应用场景还包括国际象棋精通度预测、疾病预测等。
3. 算法优化GBDT 算法在应对数据中的一些常见问题时,存在一些优化方法。
首先是在高维度数据中使用特征选择技术消除不必要的特征,提高训练效率和模型精度。
其次是通过缩小步长参数、增加决策树深度、调整正则化系数等优化方法,可以进一步提高模型的稳定性和泛化能力。
另外,采用随机渐进搜索或 Stochastic Gradient Boosting,可以加速模型训练。
最后再提一提,数据预处理(例如缺失值处理、数据归一化等)对模型训练也是有很大的帮助的。
4. 实战应用GBDT 算法在实际应用过程中,一般使用 Python、R 等主流编程语言进行开发和调试。
1.什么是GBDTGBDT属于集成算法的一种,基分类器是回归树(分类问题也是回归树,最后再用sigmoid或者softmax函数计算类别),是一种boosting算法,即逐步拟合逼近真实值,是一个串行的算法,可以减少bias(误差)却不能减少variance(偏差),因为每次基本都是全样本参与训练,不能消除偶然性的影响,但每次都逐步逼近真实值,可以减少误差。
GBDT包括三种基本用法,一是回归,二是二分类,三是多分类。
技术细节有点差异,但是整体思路都是一样的。
2.GBDT要知道的基础知识•基分类器是cart回归树,你要知道树怎么划分节点,怎么停止分裂,这个不知道的自己去百度吧。
•损失函数有很多,回归问题常用均方差,绝对值,huber和分位数也常用,但是基本的问题就用均方差解决了,因为求导特别方便;分类问题常用对数形式的损失函数,这里注意用的是(-1,1)形式的对数损失函数,可以证明和(0,1)形式的是等价的•目标函数值初始化,每次说到目标函数和损失函数都害怕大家误解,这里的目标函数指函数最终预测值。
初代的目标函数,根据目标函数的不同会有不同的初始化方案,比如均方差损失是均值,绝对值损失是中位数,对数损失是正负样本概率值比的一半。
•正则化,人家别的算法都在损失函数上加一个L2正则,这个树咋办啊,这个树有自己的办法,比如设置一个学习率,设置一个树的结构(最大的深度,最大的叶子节点数),也可以随机抽样本训练树,也可以随机抽指标参与训练,也可以用CART 的剪枝策略。
•回归和分类有什么区别,回归树叶子节点得分就是均值,然后每棵树每个样本都有一个得分,得分累加就是最后的预测值。
分类就不一样了,叶子节点的得分是用牛顿法计算出来的用偏差计算的一个数值,听听这个麻烦,你肯定不能它直接当预测结果,用sigmoid或者softmax算一下概率就出来分类了。
•为什么残差可以作为拟合的目标值,因为采用梯度下降算法,梯度就是求导,平方损失函数,残差就是梯度。
至于抑制单颗决策树的复杂度的方法有很多
比如限制树的最大深度
限制叶子节点的最少样本数量
限制节点分裂时的最少样本数量
吸收bagging的思想对训练样本采样(subsample)
在学习单颗决策树时只使用一部分训练样本
借鉴随机森林的思路在学习单颗决策树时只采样一部分特征
在目标函数中添加正则项惩罚复杂的树结构等。
现在主流的GBDT算法实现中这些方法基
本上都有实现,因此GBDT算法的超参数还是比较多的,应用过程中需要精心调参,并用
交叉验证的方法选择最佳参数。
2、机器学习的关键元素
先复习下监督学习的关键概念:模型(model)、参数(parameters)、目标函数(objective function)模型就是所要学习的条件概率分布或者决策函数,它决定了在给定特征向量x时如何预测出目标y。
定义任意x(属于R)为训练集中的第i个训练样本,则线性模型(linear mode)可以表示为:
模型预测的分数y^i在不同的任务中有不同的解释。
例如在逻辑回归任务中,表
示模型预测为正例的概率;而在排序学习任务中,表示排序分。
参数就是我们要从数据中学习得到的内容。
模型通常是由一个参数向量决定的函数。
例如:线性模型的参数可以表示为:
目标函数通常定义为如下形式:
其中,是损失函数,用来衡量模型拟合训练数据的好坏程度;称之为正则项,用来衡量
学习到的模型的复杂度。
训练集上的损失(Loss)定义为:
常用的损失函数有平方损失(square loss):
logistic 损失:
常用的正则项有L1范数:
常用的正则项有L2范数:
Ridge regression就是指使用平方损失和L2范数正则项的线性回归模型;
Lasso regression就是指使用平方损失和L1范数正则项的线性回归模型;
逻辑回归(Logistic regression)指使用logistic损失和L2范数或L1范数正则项的线性模型目标函数之所以定义为损失函数()和正则项()两部分,是为了尽可能平衡模型的偏差和方差
(Bias Variance Trade-off)
最小化目标函数意味着同时最小化损失函数和正则项,损失函数最小化表明模型能够较好的拟合训
练数据,一般也预示着模型能够较好地拟合真实数据(groud true)
另一方面,对正则项的优化鼓励算法学习到较简单的模型,简单模型一般在测试样本上的预测结果
比较稳定、方差较小(奥坎姆剃刀原则)。
也就是说,优化损失函数尽量使模型走出欠拟合的状
态,优化正则项尽量使模型避免过拟合。
从概念上区分模型、参数和目标函数给学习算法的工程实现带来了益处,使得机器学习的各个组成部分之间耦合尽量松散。
3、加法模型(additive model)
GBDT算法可以看成是由K棵树组成的加法模型:
其中为所有树组成的函数空间,以回归任务为例,回归树可以看作为一个把特征向量映射为某个score的函数。
该模型的参数为:。
与一般的机器学习算法不同的是,加
法模型不是学习d维空间中的权重,而是直接学习函数(决策树)集合。
上述加法模型的目标函数定义为:
其中表示决策树的复杂度,那么该如何定义树的复杂度呢?比如,可以考虑树的节点数量、树的深度
或者叶子节点所对应的分数的L2范数等等。
如何来学习加法模型呢?
解这一优化问题,可以用前向分布算法(forward stagewise algorithm)。
因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数(结构),逐步逼近优化目标函数,那么就可以简化复杂度。
这一学习过程称之为Boosting。
具体地,我们从一个常量预测开始,每次学习一个新的函
数,过程如下:
那么,在每一步如何决定哪一个函数被加入呢?---指导原则还是最小化目标函数。
在第步,模型对的预测为:,其中为这一轮我们要学习的函数(决策
树)。
这个时候目标函数可以写为:
举例说明,假设损失函数为平方损失(square loss),则目标函数为:
其中,称之为残差(residual)。
因此,使用平方损失函数时,GBDT算法的每一步在生成决
策树时只需要拟合前面的模型的残差
泰勒公式:设是一个正整数,如果定义在一个包含的区间上的函数在点处次可导,那么对于
这个区间上的任意都有:,其中的多项式称为函数在处的泰
勒展开式,是泰勒公式的余项且是的高阶无穷小。
根据泰勒公式把函数在点处二阶展开,可得到如下等式:
由等式(1)可知,目标函数是关于变量的函数,若把变量看成是等式(3)中的,把变量
看成是等式(3)中的,则等式(1)可转化为:
其中,定义为损失函数的一阶导数,即;定义为损失函数的二阶导数
,即。
假设损失函数为平方损失函数,则
,,把和代入等式(4)即得等式
(2)。
由于函数中的常量在函数最小化的过程中不起作用,因此我们可以从等式(4)中移除掉常量项,得:
由于要学习的函数仅仅依赖于目标函数,从等式(5)可以看出只需为学习任务定义好损失函数,并为每个训练样本计算出损失函数的一阶导数和二阶导数,通过在训练样本集上最小化等式(5)即可求得每步要学习的函数,从而根据加法模型等式(0)可得最终要学习的模型。
4、GBDT算法
一颗生成好的决策树,假设其叶子节点个数为,该决策树是由所有叶子节点对应的值组成的向量,
以及一个把特征向量映射到叶子节点索引(Index)的函数组成的。
因此,决策树可
以定义为:
决策树的复杂度可以由正则项来定义,即决策树模型的复杂度由生成的树的叶子
节点数量和叶子节点对应的值向量的L2范数决定。
定义集合为所有被划分到叶子节点的训练样本的集合。
等式(5)可以根据树的叶子节点重
新组织为T个独立的二次函数的和:
定义,,则等式(6)可写为:
假设树的结构是固定的,即函数确定,令函数的一阶导数等于0,即可求得叶子节点对应的值为:
此时,目标函数的值为:
综上,为了便于理解,单颗决策树的学习过程可以大致描述为:
1.枚举所有可能的树结构
2.用等式(8)为每个计算其对应的分数,分数越小说明对应的树结构越好
3.根据上一步的结果,找到最佳的树结构,用等式(7)为树的每个叶子节点计算预测值
然而,可能的树结构数量是无穷的,所以实际上我们不可能枚举所有可能的树结构。
通常情况下,我们采用贪心策略来生成决策树的每个节点.
1.从深度为0的树开始,对每个叶节点枚举所有的可用特征
2.针对每个特征,把属于该节点的训练样本根据该特征值升序排列,通过线性扫描的方式来决定该特征
的最佳分裂点,并记录该特征的最大增益(采用最佳分裂点时的增益)
3.选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,把该节点生长出左右两个
新的叶节点,并为每个新节点关联对应的样本集
4.回到第1步,递归执行到满足特定条件为止。