【22.2 增强决策树】

1、增强决策树 XGBoost

除了随机森林,还有一种更好的算法,XGBoost。

迄今为止,最常用的实现决策树的算法是,XGBoost,运行速度快,开源,易用。

回顾上部分的随机森林算法,从原始样本集n中有放回的取一部分样本集k个,用k个样本来训练决策树,然后重复取k个,训练决策树,直到达到停止标准。(重复B次)

当每次重复这个循环时,改变的一点是,在抽样时,不是以相同的概率选择每个训练样本,而是以更高的概率去选择那些在目前构建的树集合中表现较差的样本(那些被决策树错误分类的样本,有更高的概率被选中)。

在教育和培训中,有刻意练习的概念,重点放在那些会搞错,自己尚未掌握的知识点上。

这和 boosting 的想法一致。找到那些目前被决策树分类错误的样本,然后再训练一次,这次新构建的决策树,在这些被分类错误的样本上,很可能会有更好的表现。关注那些尚未处理好(错误分类)的例子集上,而不是关注于整个样本集,这对于学习更高效。

具体来说,检查刚刚构建好的决策树,并回到原始训练集(注意是原始全部训练集,而非抽取的部分样本),检查这个决策树对原始训练集的预测结果。

在第二次循环中,使用有放回抽样来重新生成训练集,每次选取样本时,那些被错误分类的样本有更大的概率会被选中,这会让第二棵树以类似于刻意练习的方式关注这些被分类错误的样本示例。

这种提升过程将总被执行B次。

在每次迭代中,我们会检查第一棵树、第二棵树...第B-1棵树的训练出错的样本,在构建第B棵树的训练集时,这些样本有更大的概率被选中。

(在数学上,如何实现增加某个样本相对于其他样本的被选中的概率,具体实现比较复杂)

在各种实现提升的方法中,XGBoost 被广泛使用,代表极端梯度提升 Extreme Gradient Boosting。这是一个快速、高效、且开源的提升树实现。

区别于有放回抽样,XGBoost会为不同的训练样本分配不通的权重,所以它实际上不需要生成大量随机选择的训练集,这使得它比使用有放回抽样要高效。

XGBoost的实现细节比较复杂,但可以使用它的开源库,使用算法做分类和回归的区别在于:分类是有限的离散点;回归是无限的连续点。

2、何时使用决策树/神经网络

优缺点

决策树和树集合:

优点:

1、通常在表格数据上(结构化数据)表现良好;

示例:基于房屋特征预测房屋价格的数据集。存储在电子表格中的数据;无论是分类还是回归,预测离散值或连续值时;

并不推荐在非结构化数据上使用决策树,比如图片,音频,文本(不以电子表格形式存储的)。

2、决策树和集成树的训练速度特别快;

3、小的决策树(如几十个节点),可以被人为理解分析;

集成树:

比单个决策树计算成本略高;

(除非个人预算非常有限的情况下,一般推荐使用集成树,使用XGBoost算法)

神经网络:

(适合处理非结构化数据任务;)

优点:

在所有类型的数据上都表现良好,包括结构化和非结构化数据,以及混合类型的数据。

可以与迁移学习(transfer learning)结合。 当数据集很小时,无法基于私有的数据集来训练出良好表现的模型,就不得不使用迁移学习(即,将在别的大量数据上预训练过的模型,拿来在自己的数据集上做微调)。

技术实现上,将多个神经网络串联使用是容易的,以构建一个更大的机器学习系统。

基本原因是,神经网络将输出y计算为输入x的平滑或连续函数,因此,即使你串联了很多不同的模型,这些不同模型的输出本身也是可微分的(differentiable),所以你可以同时使用梯度下降算法来训练它们。

若要构建由多个机器学习模型协同工作的系统,串联和训练多个神经网络比多个决策树更容易。而决策树一次只能训练一棵树。

缺点:

计算成本要比决策树要高,训练时间较长。

监督学习需要带有标签Y的训练集数据,另外,还有一类非常强大的算法叫做无监督学习算法,它们并不需要标签Y也能找出非常有趣的模式并处理。

相关推荐
人邮异步社区18 小时前
PRML为何是机器学习的经典书籍中的经典?
人工智能·机器学习
xiangzhihong819 小时前
使用 Trae IDE 一键将 Figma 转为前端代码
机器学习
Coding茶水间19 小时前
基于深度学习的反光衣检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
图像处理·人工智能·深度学习·yolo·目标检测·机器学习·计算机视觉
露临霜20 小时前
重启机器学习
人工智能·机器学习
CappuccinoRose20 小时前
均值向量的检验
机器学习·均值向量·均值向量的检验·多元均值向量的检验
qq_4335545420 小时前
C++数位DP
c++·算法·图论
AshinGau21 小时前
Softmax 与 交叉熵损失
神经网络·算法
似水এ᭄往昔21 小时前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
栀秋66621 小时前
“无重复字符的最长子串”:从O(n²)哈希优化到滑动窗口封神,再到DP降维打击!
前端·javascript·算法
xhxxx21 小时前
不用 Set,只用两个布尔值:如何用标志位将矩阵置零的空间复杂度压到 O(1)
javascript·算法·面试