网站首页 > 技术文章 正文
1、概述
梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是一种用于回归、分类和排序任务的机器学习技术。该算法由多棵决策树组成,所有树的结论累加起来作为最终答案。它在提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。GBDT的思想使其具有天然优势可以发现多种有区分性的特征以及特征组合。
GBDT主要由三个概念组成:Regression Decision Tree(DT)、Gradient Boosting(GB)和Shrinkage。理解这三个概念之后就能明白GBDT是如何工作的。
2、回归树(Regression Decision Tree)
提到决策树,绝大部分人首先想到的就是C4.5分类决策树。但如果一开始就把GBDT中的树理解成分类树,那就大错特错了,千万不要认为GBDT是很多棵分类树。
决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;后者用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。这里要强调的是,前者的结果加减是有意义的;后者则无意义。GBDT的核心在于累加所有树的结果作为最终结果,而分类树的结果显然是无法累加的。所以GBDT中的树都是回归树,不是分类树,这点对理解GBDT相当重要,尽管GBDT调整后也可用于分类,但不代表GBDT的树是分类树。
首先讨论分类树,众所周知C4.5分类树在每次分支时,是穷举每一个特征的每一个阈值,找到使得按照特征小于等于阈值和特征大于阈值分成的两个分支的熵最大的特征和阈值,按照该标准分支得到两个新节点,用同样方法继续分支直到所有元素都被分入属性唯一的叶子节点,或达到预设的终止条件,若最终叶子节点中的属性不唯一,则以多数元素的属性作为该叶子节点的属性。
回归树总体流程也是类似的,不过在每个节点(不一定是叶子节点)都会得到一个预测值。以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分支时穷举每一个特征的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差,即每个人的年龄与预测年龄的误差平方和除以人数。这很好理解,被预测出错的人数越多,均方差越大,通过最小化均方差能够找到最靠谱的分支依据。分支直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限)。若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄作为该叶子节点的预测年龄。
3、梯度提升(Gradient Boosting)
提升树是迭代多棵树来共同决策,怎么实现呢?难道每棵树独立训练一遍,取平均值吗?当然不是,这是投票方法,并不是GBDT,此外只要训练集不变,独立训练三次的三棵树必定完全相同,这样没有意义。GBDT是把所有树的结论累加起来得出最终结论的,其核心在于,每一棵树学的是之前所有树结论之和的残差。比如A的真实年龄是18岁,第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶节点,那么累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学习。这就是Gradient Boosting的意义。
4、Shrinkage
Shrinkage的核心思想是:每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合。即它不完全信任每一棵残差树,认为每棵树只学到了真理的一小部分,累加的时候只累加一小部分,通过多学习几棵树来弥补不足。
5、GBDT的优缺点
优点:
- 预测阶段的计算速度快,树与树之间可并行化计算;
- 在分布稠密的数据集上,泛化能力和表达能力都很好;
- 采用决策树作为弱分类器使GBDT具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的处理如归一化等;
缺点:
- GBDT在高维稀疏的数据集上,表现不如SVM或者神经网络;
- GBDT在处理文本分类特征问题上,不如处理数值特征效果好;
- 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。
(本文部分内容来自https://zhuanlan.zhihu.com/p/108641227)
猜你喜欢
- 2024-12-19 最大熵模型原理小结 最大熵模型的应用
- 2024-12-19 分类模型综述 分类模型的工作原理及使用方式
- 2024-12-19 【随机森林】深入浅出讲解随机森林算法
- 2024-12-19 大数据挖掘、可视化与ChatGPT职场赋能培训班
- 2024-12-19 「析易科研」树形分类模型有哪些?
- 2024-12-19 图解十大常用算法 常用算法模板
- 2024-12-19 使用Python中从头开始构建决策树算法
- 2024-12-19 Python机器学习系列之scikit-learn决策树原理简要概述
- 2024-12-19 机器学习之决策树知识思考 决策树算法是机器算法吗
- 2024-12-19 【Python机器学习系列】一文教你实现决策树模型可视化(案例)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)