机器学习5-GBDT

GBDT介绍

梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)是Boosting家族的一员。
GBDT也是迭代,使用了前向分布算法,无论是处理回归问题还是二分类以及多分类,弱学习器只能用CART回归树模型。因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。GBDT迭代中,假设前一轮迭代的强学习器为 f t − 1 ( x ) f_{t-1}(x) ft1(x),损失函数时 L ( y , f t − 1 ( x ) ) L(y,f_{t-1}(x)) L(y,ft1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器 h t ( x ) h_t(x) ht(x),让本轮的损失函数 L ( y , f t ( x ) ) = L ( y , f t − 1 ( x ) + h t ( x ) ) L(y,f_{t}(x))=L(y,f_{t−1}(x)+h_t(x)) L(y,ft(x))=L(y,ft1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。

CART回归树

对于回归模型,我们使用了常见的和方差的度量方式,CART回归树的度量目标是,对于任意划分特征A,对应的任意划分点s两边划分成的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。
回归树的样本输出是连续值。回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。
在这里插入图片描述

GB–Gradient Boosting 梯度提升树:

(1)错误思想:求均值就是GBDT。
用三颗决策树预测一个人身高时,决策棵1预测为是1.7米,决策树2预测是1.75米,决策树3预测是1.8米。然后1.7 + 1.75 + 1.8 求均值,这样是不对的。因为只要训练集不变,独立训练三次的三棵树必定完全相同,这样做完全没有意义的。

(2)正确思想:把所有树的结论累加起来做决策
我们在用GBDT做预测的时候,每棵树的数值不是身高的实际数值,而是一个残差值,将残差值累加才是真实身高=。每一棵树学的是之前所有树的残差,这个残差累加后能得到真实值
例如一个人的身高是1.8米,决策树1预测为1.1米,1.8 - 1.1 = 0.7,那么残差为0.7米。然后决策树2将0.7米拿去训练学习,如果决策树2能把年龄分到0.7米的叶子节点,那累加两棵树的结果:1.1 + 0.7 = 1.8米就是实际身高;如果决策树2的结果是0.5米,那么决策树2将0.5米拿去训练学习,0.7 - 0.5 = 0.2,则还存在0.2米的残差,决策树3继续学。这就是Gradient Boosting的核心思想。

DT–Regression Decistion Tree中的树一般是回归树:

我们都知道,决策树可以用于回归和分类。回归树用于预测实数值,用户的身高,体重,年龄,爱好,所在地的天气,湿度,温度,是否有风。分类树用于分类标签值,如气温高,低,适中、用户性别,学历,工作类型。数值相加减是有意义的,1米 + 1.5米 + 1.7米 = 3.2米,标签值相加减是无意义的,如男+男+女=到底是男是女? GBDT的核心在于累加所有树的结果作为最终结果。虽然调整后也可用于分类,但不代表GBDT的树是分类树。

Shrinkage–缩减,循序渐进:

Shrinkage的思想强调的是循序渐进,就好比不能一口吃出一个胖子。每次迭代只走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一个棵残差树,它认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学几棵树弥补不足。

GBDT算法原理

在损失函数loss负梯度方向,利用残差逼近的方式去拟合一颗CART,不断迭代后,最后累加所有CART。
用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为
在这里插入图片描述
利用( x i x_i xi, r t i r_{ti} rti)(i=1,2,…m),此时 r t i r_{ti} rti作为目标值,我们可以拟合一颗CART回归树,得到了第t颗回归树,其对应的叶节点区域Rtj,j=1,2,…,J。其中J为叶子节点的个数。
针对每一个叶子节点里的样本,我们求出使损失函数最小,也就是拟合叶子节点最好的的输出值ctj如下:
在这里插入图片描述
这样我们就得到了本轮的决策树拟合函数如下:

在这里插入图片描述
从而本轮最终得到的强学习器的表达式如下:
在这里插入图片描述
在这里插入图片描述

GBDT实例

https://blog.csdn.net/zpalyq110/article/details/79527653

GBDT分类算法

https://www.cnblogs.com/pinard/p/6140514.html

GBDT 优缺点

GBDT主要的优点有:

1) 可以灵活处理各种类型的数据,包括连续值和离散值。

2) 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。

3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
4)可以用于分类、回归。
5)可以筛选/组合特征:计算所有非叶子节点在分裂时加权不纯度的减少,减少得越多,说明特征越重要
6)继承了决策树的优点(处理高维,缺失值不敏感)

GBDT的主要缺点有:

1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。

GBDT面试问题收集

1. 什么是残差?
当前估计值与实际值之间的差值

2. GBDT为什么要拟合前面几轮的残差?
损失函数的负梯度方向在当前模型的值近似残差,每一轮迭代尽量去拟合残差,使得最终累加结果趋近真实值

3. GBDT通过什么方式减少误差 ?
不断迭代去拟合残差。

4. GBDT可以用决策分类树吗?
不可以,只能是CART回归树

5. 为什么只能用CART回归树?
源于GBDT的核心思想中需要将所有树的预测值累计,而分类树的结果显然是没办法累加的,比如男+男+女=到底是男是女,所以GBDT中的树都是回归树,不是分类树

6. GBDT为什么不能并行?
因为各分类器间相互依赖

7. GBDT如何正则化?
控制CART的复杂度(叶子节点数目,叶子节点最少样本数目),梯度提升迭代次数M,在CART回归树前面乘一个很小的衰减(Shrinkage)–v<0.1(较小的v意味着需要更多的迭代次数,减小树的影响,防止过拟合),采用随机梯度下降,CART回归树剪枝。

8. GBDT分裂规则或者CART回归树是如何选取特征的?
两次暴力遍历,遍历每个特征,对每个特征遍历其所有可能的切分点(中位数)->找到最优特征的最优切分点
PS:这里的最优衡量=平方差损失;而CART分类是GINI指数

9. 如何停止分裂?
1.叶子节点最小样本数;
2.树的深度或者最大叶子节点数;
3.最小损失函数满足某条件

10. GBDT的梯度体现在哪里?
构建CART时使用损失函数的负梯度保证沿着loss下降最快的方向拟合CART

11. GBDT为什么要用梯度下降?
负梯度是损失函数下降最快的方向,即为快速找到最小损失函数

12. GBDT如何做特征选择?
计算每棵树非叶子节点分裂后平方损失的减少,减少得越多说明特征越重要

13. 为什么GBDT的树深度较RF浅?
GBDT利用残差逼近不断拟合原数据,每一轮都需要保证一定的偏差,所以每棵决策树更浅
RF并行训练不同的分类器+输出为多数表决—> 因此需要每棵决策树尽可能去拟合样本—>基本不剪枝

14. GBDT如何加速训练?
预排序,预排序可以加速查找最佳分裂点;计算样本负梯度时并行??

15. GBDT哪些部分可以并行?
1.计算每个样本的负梯度;2.选取最佳分割点时;3.预测时将每个样本之前的值累加时。

16. GBDT参数设置?
迭代次数,树的深度/叶子节点个数,叶子节点包含的最少样本个数

17. GBDT的效果相比于传统的LR,SVM效果为什么好一些?
GBDT基于树模型,继承了树模型的优点 [对异常点鲁棒、不相关的特征(即非线性特征)干扰性低(LR需要加正则)、可以很好地处理缺失值,处理高维数据] ,同时又避免了决策树易出现过拟合的现象

18. GBDT为什么要归一化?
1.加快梯度下降收敛速度,避免震荡现象;2.提高精度

19. GBDT如何进行特征组合,从而解决LR处理非线性的问题?
对于输入X,记录其在GBDT中落入到每棵树叶子节点的编码(比如,有3个节点的树,落入到第2个节点,则编号=[0,1,0]),将其作为新的特征(新特征向量的长度等于GBDT模型里所有树包含的叶子结点数之和),加入到原始特征集,再用LR训练.

20. GBDT和Adaboost的区别?
1.GBDT每次迭代沿梯度下降最快方向学习去弥补模型的不足;Adaboost每次迭代提升错误样本权重来弥补模型的不足;
2.GBDT可选多种目标函数,当为均方误差时,正好为残差;Adaboost目标函数为指数损失函数
3.GBDT无更新样本分布,无分类器权重;Adaboost都有
4.GBDT输出为累加;Adaboost分类为多数表决,回归为取平均值
5.GBDT分类器只能是CART回归树;Adaboost可有其他类型分类器

21. GBDT和RF的区别?
1.RF基于bagging思想;GBDT基于boosting思想
2.RF的树可以是回归树或分类树;GBDT只能是回归树
3.RF树之间相互独立,可并行建树;GBDT树之间相互依赖,只能串行建树
4.RF最终结果是多数表决;GBDT是线性累加
5.RF通过减少模型方差提高性能,即树更深;GBDT通过减少模型偏差来提高性能,即树更浅
6.RF对异常值不敏感,源于多棵树表决;GBDT对异常值较敏感,当下的错误会延续到下一棵树
7.RF不需要特征归一化;GBDT需要对特征归一化
Ps:机器学习模型使用梯度下降法求最优解,那么往往需要归一化,否则很难收敛甚至不能收敛,因为特征量级不同,量级大的特征的步子大(即收敛速度快),早早到达最低点,需等待其他特征,即震荡现象。

转载自:
https://blog.csdn.net/UniqueenCT/article/details/88930042

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PSO-GBDT (Particle Swarm Optimization - Gradient Boosting Decision Tree) 是一种用于多分类问题的机器学习算法。它将粒子群优化算法 (Particle Swarm Optimization, PSO) 与梯度提升决策树 (Gradient Boosting Decision Tree, GBDT) 结合起来,以提高多分类问题的准确性。 在 Python 中,可以使用 Scikit-learn 库中的 GradientBoostingClassifier 类来实现 GBDT 算法。同时,可以使用 PySwarm 库来实现 PSO 算法。 下面是一个使用 PSO-GBDT 算法进行多分类的 Python 示例代码: ```python from sklearn.ensemble import GradientBoostingClassifier from pyswarm import pso # 定义 PSO-GBDT 模型 def pso_gbdt(X, y): def objective_function(params): lr, md, mf, ne = params clf = GradientBoostingClassifier( learning_rate=lr, max_depth=md, max_features=mf, n_estimators=ne ) clf.fit(X, y) return 1 - clf.score(X, y) # 定义参数范围 lb = [0.01, 1, 1, 10] ub = [0.1, 5, X.shape[1], 100] # 运行 PSO 算法 xopt, fopt = pso(objective_function, lb, ub, swarmsize=10, maxiter=50) # 训练最佳模型并返回 lr, md, mf, ne = xopt clf = GradientBoostingClassifier( learning_rate=lr, max_depth=int(md), max_features=int(mf), n_estimators=int(ne) ) clf.fit(X, y) return clf # 加载数据并训练模型 from sklearn.datasets import load_iris X, y = load_iris(return_X_y=True) model = pso_gbdt(X, y) # 预测新数据 y_pred = model.predict(X) ``` 在这个示例代码中,我们定义了一个 `pso_gbdt` 函数来创建 PSO-GBDT 模型。该函数接受输入数据和目标变量,并返回训练好的最佳模型。在函数内部,我们首先定义了一个 `objective_function` 函数,用于计算模型的误差。然后,我们定义了四个参数的范围,即学习率、最大深度、最大特征数和迭代次数。最后,我们使用 PySwarm 库中的 `pso` 函数运行 PSO 算法,得到最佳参数。然后,我们训练最佳模型并返回。 在这个示例代码中,我们使用鸢尾花数据集作为训练数据,使用 PSO-GBDT 算法进行多分类。你可以根据自己的需要修改代码,并使用适当的数据集来拟合模型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值