GBDT模型.pdf

上传人:奉*** 文档编号:4062237 上传时间:2021-01-14 格式:PDF 页数:69 大小:1.05MB
返回 下载 相关 举报
GBDT模型.pdf_第1页
第1页 / 共69页
GBDT模型.pdf_第2页
第2页 / 共69页
点击查看更多>>
资源描述

《GBDT模型.pdf》由会员分享,可在线阅读,更多相关《GBDT模型.pdf(69页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、GBDT算法及其应用 01 提升树之Adaboost算法的介绍 02 梯度提升树之DBDT算法的介绍 03 非平衡数据的处理 目 录 04 DBDT的改进之XGBoost算法介绍 05 各集成算法的应用实战 提升树之Adaboost算法的介绍 模型介绍 提升树算法与线性回归模型的思想类似,所不同的是该算法实现了多棵基础决策树() 的加权运算,最具代表的提升树为AdaBoost算法,即: () = =1 = 1 + 其中,()是由棵基础决策树构成的最终提升树,1 表示经过 1轮迭代后的 提升树,为第棵基础决策树所对应的权重,()为第棵基础决策树。 提升树之Adaboost算法的介绍 损失函数的介

2、绍 对于Adaboost算法而言,每一棵基础决策树都是基于前一棵基础决策树的分类结果对 样本点设置不同的权重,如果在前一棵基础决策树中将某样本点预测错误,就会增大该样本 点的权重,否则会相应降低样本点的权重,进而再构建下一棵基础决策树,更加关注权重大 的样本点。 所以,AdaBoost算法需要解决三大难题,即样本点的权重如何确定、基础决策树 ()如何选择以及每一棵基础决策树所对应的权重如何计算。 提升树之Adaboost算法的介绍 损失函数的介绍 , = , = = =1 = 1 + 如果提升树1 还能够继续提升,就说明损失函数还能够继续降低,换句话说,如果 将所有训练样本点带入损失函数中,一

3、定存在一个最佳的和 ,使得损失函数尽量最大 化地降低,即: ,= ),( =1 1+ 提升树之Adaboost算法的介绍 损失函数的介绍 进一步,还可以将最小化的目标函数改写成下式: ,= ),( =1 其中,= 1,由于与损失函数中的和 无关,因此在求解 最小化的问题时只需重点关注 =1 部分。 提升树之Adaboost算法的介绍 损失函数的介绍 对于 =1 而言,当第棵基础决策树能够准确预测时,与的乘 积为1,否则为-1,于是 的结果为 或 ,对于某个固定的 而言,损失函数中的和式仅仅是关于的式子。所以,要想求得损失函数的最小值,首先 得找到最佳的 ,使得所有训练样本点带入 后,误判结果越

4、少越好,即最佳的 可以表示为: = =1 其中,表示所有可用的基础决策树空间, 就是从空间中寻找到的第轮基础决策 树,它能够使加权训练样本点的分类错误率最小, 表示当第棵基础决策树预测 结果与实际值不相等时返回1。 提升树之Adaboost算法的介绍 损失函数的介绍 , = 1 + = =1 = = + = =1 + =1 提升树之Adaboost算法的介绍 损失函数的介绍 =1 = =1 + =1 = = + = , = + =1 =1 最终令 , = 0 = 1 2 1 求偏导,令导函数为0 其中,= =1 =1 = =1 , 表示基础决策树的错误率。 提升树之Adaboost算法的介绍

5、Adaboost分类算法步骤 在第一轮基础决策树1 的构建中,会设置每一个样本点的权重1均为 1 。 计算基础决策树 在训练数据集上的误判率= =1 。 计算基础决策树 所对应的权重 = 1 2 1 。 根据基础决策树 的预测结果,计算下一轮用于构建基础决策树的样本点权重+1,: +1,= =1 , = =1 , 提升树之Adaboost算法的介绍 Adaboost回归算法步骤 初始化一棵仅包含根节点的树,并寻找到一个常数能够使损失函数达到极小值。 计算第轮基础树的残差值= ()。 将残差值视为因变量,再利用自变量的值对其构造第 + 1轮基础树+1()。 重复步骤(2)和(3),得到多棵基础树

6、,最终将这些基础树相加得到回归提升树 () = =1 。 提升树之Adaboost算法的应用 Adaboost函数语法 AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=SAMME.R, random_state=None) AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, loss=linear, random_state=None) base_estimator:用于指定

7、提升算法所应用的基础分类器,默认为分类决策树(CART),也可以是其他 基础分类器,但分类器必须支持带样本权重的学习,如神经网络。 n_estimators:用于指定基础分类器的数量,默认为50个,当模型在训练数据集中得到完美的拟合后,可 以提前结束算法,不一定非得构建完指定个数的基础分类器。 learning_rate:用于指定模型迭代的学习率或步长,即对应的提升模型F(x)可以表示为F(x) = Fm1x + mfmx ,其中的就是该参数的指定值,默认值为1;对于较小的学习率而言,则需要迭代更多次的基 础分类器,通常情况下需要利用交叉验证法确定合理的基础分类器个数和学习率。 提升树之Ada

8、boost算法的应用 Adaboost函数语法 AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=SAMME.R, random_state=None) AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, loss=linear, random_state=None) algorithm:用于指定AdaBoostClassifier分类器的算法,默认为SAMME.R,也可以使用

9、SAMME;使 用SAMME.R时,基础模型必须能够计算类别的概率值;一般而言,SAMME.R算法相比于SAMME算 法,收敛更快、误差更小、迭代数量更少。 loss:用于指定AdaBoostRegressor回归提升树的损失函数,可以是linear,表示使用线性损失函数;也 可以是square,表示使用平方损失函数;还可以是exponential,表示使用指数损失函数;该参数的默 认值为linear。 random_state:用于指定随机数生成器的种子。 提升树之Adaboost算法的应用 信用卡是否违约的识别 # 读入数据 default = pd.read_excel(rC:Users

10、AdministratorDesktopdefault of credit card.xls) # 为确保绘制的饼图为圆形,需执行如下代码 plt.axes(aspect = equal) # 统计客户是否违约的频数 counts = default.y.value_counts() # 绘制饼图 plt.pie(x = counts, # 绘图数据 labels=pd.Series(counts.index).map(0:不违约,1:违约), autopct=%.1f% # 设置百分比的格式,这里保留一位小数 ) # 显示图形 plt.show() 提升树之Adaboost算法的应用 信用卡

11、是否违约的识别 # 排除数据集中的ID变量和因变量,剩余的数据用作自变量X X = default.drop(ID,y, axis = 1) y = default.y # 数据拆分 X_train,X_test,y_train,y_test = model_selection.train_test_split(X,y,test_size = 0.25, random_state = 1234) # 构建AdaBoost算法的类 AdaBoost1 = ensemble.AdaBoostClassifier() # 算法在训练数据集上的拟合 AdaBoost1.fit(X_train,y_tr

12、ain) # 算法在测试数据集上的预测 pred1 = AdaBoost1.predict(X_test) 提升树之Adaboost算法的应用 信用卡是否违约的识别 # 返回模型的预测效果 print(模型的准确率为:n,metrics.accuracy_score(y_test, pred1) print(模型的评估报告:n,metrics.classification_report(y_test, pred1) out: 模型的准确率为: 0.812533333333 模型的评估报告: precision recall f1-score support 0 0.83 0.96 0.89 5

13、800 1 0.68 0.32 0.44 1700 avg / total 0.80 0.81 0.79 7500 提升树之Adaboost算法的应用 信用卡是否违约的识别 提升树之Adaboost算法的应用 信用卡是否违约的识别 提升树之Adaboost算法的应用 信用卡是否违约的识别 # 取出重要性比较高的自变量建模 predictors = list(importanceimportance0.02.index) Predictors # 通过网格搜索法选择基础模型所对应的合理参数组合 max_depth = 3,4,5,6 params1 = base_estimator_max_de

14、pth:max_depth base_model = GridSearchCV(estimator = ensemble.AdaBoostClassifier(base_estimator = DecisionTreeClassifier(),param_grid= params1, scoring = roc_auc, cv = 5, n_jobs = 4, verbose = 1) base_model.fit(X_trainpredictors,y_train) # 返回参数的最佳组合和对应AUC值 base_model.best_params_, base_model.best_sco

15、re_ out: base_estimator_max_depth: 3, 0.74425046797936145 提升树之Adaboost算法的应用 信用卡是否违约的识别 # 通过网格搜索法选择合理的Adaboost算法参数 n_estimators = 100,200,300 learning_rate = 0.01,0.05,0.1,0.2 params2 = n_estimators:n_estimators,learning_rate:learning_rate adaboost = GridSearchCV(estimator = ensemble.AdaBoostClassifi

16、er(base_estimator = DecisionTreeClassifier(max_depth = 3),param_grid= params2, scoring = roc_auc, cv = 5, n_jobs = 4, verbose = 1) adaboost.fit(X_trainpredictors ,y_train) # 返回参数的最佳组合和对应AUC值 adaboost.best_params_, adaboost.best_score_ out: learning_rate: 0.01, n_estimators: 300, 0.76866547085583281

17、提升树之Adaboost算法的应用 信用卡是否违约的识别 # 使用最佳的参数组合构建AdaBoost模型 AdaBoost2 = ensemble.AdaBoostClassifier(base_estimator = DecisionTreeClassifier(max_depth = 3),n_estimators = 300, learning_rate = 0.01) # 算法在训练数据集上的拟合 AdaBoost2.fit(X_trainpredictors,y_train) # 算法在测试数据集上的预测 pred2 = AdaBoost2.predict(X_testpredict

18、ors) 提升树之Adaboost算法的应用 信用卡是否违约的识别 # 返回模型的预测效果 print(模型的准确率为:n,metrics.accuracy_score(y_test, pred2) print(模型的评估报告:n,metrics.classification_report(y_test, pred2) out: 模型的准确率为: 0.816 模型的评估报告: precision recall f1-score support 0 0.83 0.96 0.89 5800 1 0.69 0.34 0.45 1700 avg / total 0.80 0.82 0.79 7500

19、梯度提升树之GBDT算法的介绍 模型介绍 梯度提升树算法实际上是提升算法的扩展版,在原始的提升算法中,如果损失函数为平方损失 或指数损失,求解损失函数的最小值问题会非常简单,但如果损失函数为更一般的函数(如绝对值 损失函数或Huber损失函数等),目标值的求解就会相对复杂很多。 梯度提升算法,是在第轮基础模型中,利用损失函数的负梯度值作为该轮基础模型损失值的 近似,并利用这个近似值构建下一轮基础模型。利用损失函数的负梯度值近似残差的计算就是梯度 提升算法在提升算法上的扩展,这样的扩展使得目标函数的求解更为方便。 梯度提升树之GBDT算法的介绍 GBDT算法步骤 初始化一棵仅包含根节点的树,并寻

20、找到一个常数onst能够使损失函数达到极小值 计算损失函数的负梯度值,用作残差的估计值,即: = , =1 利用数据集 ,拟合下一轮基础模型,得到对应的个叶子节点, = 1,2,;计 算每个叶子节点的最佳拟合值,用以估计残差: = ,1+ 梯度提升树之GBDT算法的介绍 GBDT算法步骤 进而得到第轮的基础模型 ,再结合前 1轮的基础模型,得到最终的梯度提升模 型: = 1 + = 1 + =1 = =1 =1 其中,表示第个基础模型 在叶节点上的预测值; 表示由个基础模型构 成的梯度提升树,它是每一个基础模型在样本点处的输出值之和。 梯度提升树之GBDT算法的介绍 GBDT算法在分类问题上的

21、操作步骤 初始化一个弱分类器 0 = =1 , 计算损失函数的负梯度值 = , =1 = 1 + =1 = 1 + 梯度提升树之GBDT算法的介绍 GBDT算法在分类问题上的操作步骤 利用数据集 ,拟合下一轮基础模型 重复(2)和(3),并利用个基础模型,构建梯度提升模型 = =1 其中,= 1 + 1+ = 1 + = =1 =1 梯度提升树之GBDT算法的介绍 GBDT算法在预测问题上的操作步骤 初始化一个弱分类器 0 = =1 , 计算损失函数的负梯度值 = , =1 = 1 2 2 =1 = 梯度提升树之GBDT算法的介绍 GBDT算法在预测问题上的操作步骤 利用数据集 ,拟合下一轮基

22、础模型 重复(2)和(3),并利用个基础模型,构建梯度提升模型 其中,= 1 2 1+ 2 。 = =1 = 1 + = =1 =1 梯度提升树之GBDT算法的应用 GBDT函数介绍 GradientBoostingRegressor(loss=ls, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=friedman_mse, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_

23、decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort=auto) loss:用于指定GBDT算法的损失函数,对于分类的GBDT,可以选择deviance和exponential,分别表 示对数似然损失函数和指数损失函数;对于预测的GBDT,可以选择ls lad huber和quantile,分别表 示平方损失函数、绝对值损失函数、Hube

24、r损失函数(前两种损失函数的结合,当误差较小时,使用平方 损失,否则使用绝对值损失,误差大小的度量可使用alpha参数指定 )和分位数回归损失函数(需通过 alpha参数设定分位数)。 learning_rate:用于指定模型迭代的学习率或步长,即对应的梯度提升模型F(x)可以表示为FMx = FM1x + fmx :,其中的就是该参数的指定值,默认值为0.1;对于较小的学习率而言,则需要迭代 更多次的基础分类器,通常情况下需要利用交叉验证法确定合理的基础模型的个数和学习率。 梯度提升树之GBDT算法的应用 GBDT函数介绍 GradientBoostingRegressor(loss=ls,

25、 learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=friedman_mse, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=N

26、one, warm_start=False, presort=auto) n_estimators:用于指定基础模型的数量,默认为100个。 subsample:用于指定构建基础模型所使用的抽样比例,默认为1,表示使用原始数据构建每一个基础模 型;当抽样比例小于1时,表示构建随机梯度提升树模型,通常会导致模型的方差降低,偏差提高。 criterion:用于指定分割质量的度量,默认为friedman_mse,表示使用Friedman均方误差,还可以使 用mse和mae,分别表示均方误差和绝对误差。 min_samples_split:用于指定每个基础模型的根节点或中间节点能够继续分割的最小样本量

27、, 默认为2。 min_samples_leaf:用于指定每个基础模型的叶节点所包含的最小样本量,默认为1。 min_weight_fraction_leaf:用于指定每个基础模型叶节点最小的样本权重,默认为0,表示不考虑叶节 点的样本权值。 梯度提升树之GBDT算法的应用 GBDT函数介绍 GradientBoostingRegressor(loss=ls, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=friedman_mse, min_samples_split=2, min_samples_leaf=1, m

28、in_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort=auto) max_depth:用于指定每个基础模型所包含的最大深度,默认为3层。 min_impurity_decrease:用于指定每个基础模型的节点是否继续分割的最小不纯

29、度值,默认为0;如果 不纯度超过指定的阈值,则节点需要分割,否则不分割。 min_impurity_split:该参数同min_impurity_decrease参数,在sklearn的0.21版本及之后版本将删除。 init:用于指定初始的基础模型,用于执行初始的分类或预测。 random_state:用于指定随机数生成器的种子,默认为None,表示使用默认的随机数生成器。 verbose:用于指定GBDT算法在计算过程中是否输出日志信息,默认为0,表示不输出。 alpha:当loss参数为huber或quantile时,该参数有效,分别用于指定误差的阈值和分位数。 梯度提升树之GBDT算法

30、的应用 GBDT函数介绍 GradientBoostingRegressor(loss=ls, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=friedman_mse, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_featur

31、es=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort=auto) max_features:用于指定每个基础模型所包含的最多分割字段数,默认为None,表示分割时使用所有的 字段;如果为具体的整数,则考虑使用对应的分割字段数;如果为01的浮点数,则考虑对应百分比的字 段个数;如果为sqrt,则表示最多考虑 个字段,与指定auto效果一致;如果为log2,则表示最多使 用2个字段。其中,表示数据集所有自变量的个数。 max_leaf_nodes:用于指定每个基础模型最大的叶节点个数,默认为Non

32、e,表示对叶节点个数不做任何 限制。 warm_start:bool类型参数,表示是否使用上一轮的训练结果,默认为False。 梯度提升树之GBDT算法的应用 信用卡是否违约的识别 # 运用网格搜索法选择梯度提升树的合理参数组合 learning_rate = 0.01,0.05,0.1,0.2 n_estimators = 100,200,300 max_depth = 3,4,5,6 params = learning_rate:learning_rate,n_estimators:n_estimators,max_depth:max_depth gbdt_grid = GridSearc

33、hCV(estimator = ensemble.GradientBoostingClassifier(), param_grid= params, scoring = roc_auc, cv = 5, n_jobs = 4, verbose = 1) gbdt_grid.fit(X_trainpredictors,y_train) # 返回参数的最佳组合和对应AUC值 gbdt_grid.best_params_, gbdt_grid.best_score_ out: learning_rate: 0.05, max_depth: 5, n_estimators: 100, 0.773977

34、80446802755 梯度提升树之GBDT算法的应用 信用卡是否违约的识别 # 基于最佳参数组合的GBDT模型,对测试数据集进行预测 pred = gbdt_grid.predict(X_testpredictors) # 返回模型的预测效果 print(模型的准确率为:n,metrics.accuracy_score(y_test, pred) print(模型的评估报告:n,metrics.classification_report(y_test, pred) out: 模型的准确率为: 0.814266666667 模型的评估报告: precision recall f1-score

35、support 0 0.83 0.95 0.89 5800 1 0.68 0.35 0.46 1700 avg / total 0.80 0.81 0.79 7500 梯度提升树之GBDT算法的应用 信用卡是否违约的识别 GBDT模型在测试数据集上的预测效 果与AdaBoost算法基本一致,进而可以 说明GBDT算法采用一阶导函数的值近似 残差是合理的,并且这种近似功能也提 升了AdaBoost算法求解目标函数时的便 捷性。 非平衡数据的处理 非平衡数据的特征 在实际应用中,类别型的因变量可能存在严重的偏倚,即类别之间的比例严重失调。如 欺诈问题中,欺诈类观测在样本集中毕竟占少数;客户流失问题

36、中,忠实的客户往往也是占 很少一部分;在某营销活动的响应问题中,真正参与活动的客户也同样只是少部分。 如果数据存在严重的不平衡,预测得出的结论往往也是有偏的,即分类结果会偏向于较 多观测的类。为了解决数据的非平衡问题,2002年Chawla提出了SMOTE算法,即合成少数 过采样技术,它是基于随机过采样算法的一种改进方案。 非平衡数据的处理 SMOTE算法的思想 SMOTE算法的基本思想就是对少数 类别样本进行分析和模拟,并将人工模 拟的新样本添加到数据集中,进而使原 始数据中的类别不再严重失衡。 非平衡数据的处理 SMOTE算法的步骤 采样最邻近算法,计算出每个少数类样本的K个近邻。 从K个

37、近邻中随机挑选N个样本进行随机线性插值。 构造新的少数类样本。 将新样本与原数据合成,产生新的训练集。 非平衡数据的处理 SMOTE算法的手工案例 (1)利用第11章所介绍的KNN算法, 选择离样本点1最近的K个同类样本点 (不妨最近邻为5)。 (2)从最近的K个同类样本点中,随机 挑选M个样本点(不妨设M为2),M的 选择依赖于最终所希望的平衡率。 非平衡数据的处理 SMOTE算法的手工案例 (3)对于每一个随机选中的样本点,构 造新的样本点。新样本点的构造需要使 用下方的公式: 其中,表示少数类别中的一个样本点 (如图中五角星所代表的1样本); 表示从K近邻中随机挑选的样本点; 0,1 表

38、示生成01的随机数。 = + 0,1 , = 1,2, 非平衡数据的处理 SMOTE算法的手工案例 假设图中样本点1的观测值为(2,3,10,7),从图中的5个近邻随机挑选两个样本点,它 们的观测值分别为(1,1,5,8)和(2,1,7,6),由此得到的两个新样本点为: 1= 2,3,10,7 + 0.3 1,1,5,8 2,3,10,7= 1.7,2.4,8.5,7.3 2= 2,3,10,7 + 0.26 2,1,7,6 2,3,10,7= 2,2.48,9.22,6.74 非平衡数据的处理 SMOTE算法的手工案例 (4)重复步骤(1)、(2)和(3), 通过迭代少数类别中的每一个样本,

39、 最终将原始的少数类别样本量扩大为理 想的比例。 非平衡数据的处理 SMOTE算法的函数介绍 SMOTE(ratio=auto, random_state=None, k_neighbors=5, m_neighbors=10, out_step=0.5, kind=regular, svm_estimator=None, n_jobs=1) ratio:用于指定重抽样的比例,如果指定字符型的值,可以是minority(表示对少数类别的样本进行抽 样)、majority(表示对多数类别的样本进行抽样)、not minority(表示采用欠采样方法)、all(表 示采用过采样方法),默认为aut

40、o,等同于all和not minority。如果指定字典型的值,其中键为各个 类别标签,值为类别下的样本量。 random_state:用于指定随机数生成器的种子,默认为None,表示使用默认的随机数生成器。 k_neighbors:指定近邻个数,默认为5个。 m_neighbors:指定从近邻样本中随机挑选的样本个数,默认为10个。 kind:用于指定SMOTE算法在生成新样本时所使用的选项,默认为regular,表示对少数类别的样本进行 随机采样,也可以是borderline1 borderline2和svm。 svm_estimator:用于指定SVM分类器,默认为sklearn.svm

41、.SVC,该参数的目的是利用支持向量机分类 器生成支持向量,然后生成新的少数类别的样本。 n_jobs:用于指定SMOTE算法在过采样时所需的CPU数量,默认为1表示仅使用1个CPU运行算法,即不 使用并行运算功能。 DBDT的改进之XGBoost算法介绍 XGBoost算法的介绍 XGBoost是由传统的GBDT模型发展而来的,GBDT模型在求解最优化问题时应用了一阶 导技术,而XGBoost则使用损失函数的一阶和二阶导,而且可以自定义损失函数,只要损失函 数可一阶和二阶求导。 XGBoost算法相比于GBDT算法还有其他优点,例如支持并行计算,大大提高算法的运行 效率;XGBoost在损失

42、函数中加入了正则项,用来控制模型的复杂度,进而可以防止模型的过 拟合;XGBoost除了支持CART基础模型,还支持线性基础模型;XGBoost采用了随机森林的 思想,对字段进行抽样,既可以防止过拟合,也可以降低模型的计算量。 DBDT的改进之XGBoost算法介绍 XGBoost算法的损失函数 其中, 表示经第轮迭代后的模型预测值, 1 表示已知 1个基础模型的预测值, 表示第个基础模型。 对于集成树,关键点就是第个基础模型的选择。所以,只需要寻找一个能够使目标函 数尽可能最大化降低的即可,故构造的目标函数如下: = =1 = 1 + = =1 , + =1 = =1 , 1 + + =1

43、DBDT的改进之XGBoost算法介绍 XGBoost算法的损失函数 损失函数中的 为第个基础模型的正则项,用于控制模型的复杂度。为了简单起见, 不妨将损失函数表示为平方损失,则如上的目标函数可以表示为: = =1 1 + 2 + =1 = =1 2+ 1 + 2 2 1 + + =1 = =1 2 1 + 2 + 1 2 + =1 DBDT的改进之XGBoost算法介绍 XGBoost算法的损失函数 由于前 1个基础模型是已知的,故 1 的预测值也是已知的,同时前 1个基础模型 的复杂度也是已知的,故不妨将所有的已知项设为常数 ,则目标函数可以重新表达为: = =1 2 1 + 2 + +

44、其中, 1 项就是前 1个基础模型所产生的残差,说明目标函数的选择与前 1个基础模型的残差相关,这一点与GBDT是相同的。如上是假设损失函数为平方损失,对于更 一般的损失函数来说,可以使用泰勒展开对损失函数值做近似估计。 DBDT的改进之XGBoost算法介绍 泰勒展开式 其中, 是一个具有二阶可导的函数, 为 的一阶导函数, 为 的二阶 导函数,为 在某点处的变化量。假设令损失函数为泰勒公式中的,令损失函数中 1 项为泰勒公式中的,令损失函数中项为泰勒公式中的,则目标函数 可以 近似表示为: + + + 2 = =1 , 1 + + + =1 , 1 + + 1 2 2 + + DBDT的改

45、进之XGBoost算法介绍 泰勒展开式 在上式中,和分别是损失函数 , 1 关于 1 的一阶导函数值和二阶导函数值, 即它们可以表示为: = , 1 1 = 2 , 1 1 DBDT的改进之XGBoost算法介绍 损失函数的演变 假设基础模型由CART树构成,对于一棵树来说,它可以被拆分为结构部分,以及叶子 节点所对应的输出值。可以利用这两部分反映树的复杂度,即复杂度由树的叶子节点个数 (反映树的结构)和叶子节点输出值的平方构成: = + 1 2 =1 2 其中,表示叶子节点的个数, 2表示输出值向量的平方。CART树生长得越复杂,对应的 越大, 也越大。 DBDT的改进之XGBoost算法介

46、绍 损失函数的演变 =1 , 1 + + 1 2 2 + + =1 + 1 2 2 + + 1 2 =1 2 + =1 + 1 2 2 + + 1 2 =1 2 + =1 + 1 2 2 + + 1 2 =1 2 + =1 + 1 2 + 2 + + DBDT的改进之XGBoost算法介绍 损失函数的演变 =1 + 1 2 + 2 + + =1 + 1 2 + 2 + =1 + 1 2 + 2 + 其中,= ;= 。它们分别表示所有属于叶子节点的样本点对应的之 和以及之和。所以,最终是寻找一个合理的,使得式子 =1 + 1 2 + 2 + 尽 可能大地减小。 DBDT的改进之XGBoost算法

47、介绍 损失函数的演变 求偏导,令导函数为0 = + + = 0 = + = =1 + 1 2 + 2 + = 1 2 =1 2 + + 所以,将的值导入到目标函数 中,可得: DBDT的改进之XGBoost算法介绍 损失函数的演变 为了能够寻找到最佳的树结构(即最佳的基础模型),通常会选择贪心法,即在某个已 有的可划分节点中加入一个分割,并通过计算分割前后的增益值决定是否剪枝。有关增益值的 计算如下: = 1 2 2 + + 2 + + 2 + + 其中,和为某节点分割后对应的左支样本点的导函数值,和为某节点分割后对 应的右支样本点的导函数值。这里的增益值其实就是将某节点分割为另外两个节点后对应 的目标值 的减少量。 DBDT的改进之XGBoost算法介绍 损失函数的演变 其中,1表示某个可分割节点在分割前的目 标函数值,2和3则代表该节点按照某个变量 在处的分割后对应的目标函数值。按照目标函 数的公式,可以将这三个值表示为下方的式子: 1= 1 2 + 2 + + + 2= 1 2 2 + + 3= 1 2 2 + + XGBoos

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com