该知识点学自三个视频——
1、Knowing AI知智(b站)
2、等等很简单(b站)
3、白手起家的百万富翁(b站)
目录
一、Decision Tree(决策树)
1.1什么是决策树
1.2决策树建立过程
1.3回归决策树
二、Random Forest(随机森林)
2.1什么是随机森林
三、GBDT(梯度提升决策树)
3.1什么是GBDT
3.2具体简单案例
四、XGBoost
4.1什么是XGBOOST
什么是决策树(Decision Tree)?【知多少】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HV411b7JR/?spm_id_from=333.337.search-card.all.click&vd_source=23dd4249b2e4e05d2a24fb7ba074103b 为达到目标根据一定的条件进行选择的过程就是决策树。决策树模型非常经典,在机器学习中常被用于分类,构成它的元素是节点和边。节点分为内部节点和叶子节点,内部节点为一个属性或特征,叶子节点是一个类别或某个值。
特征这么多,谁来做根节点,接下来的节点又该是什么。为了构建决策树,人们找到了一个衡量标准——熵(或者用基尼也可以)。在热力学中,熵被用来描述一个系统内在的混乱程度,在决策树中,熵代表分支下样本种类的丰富性,样本种类越多越混乱,熵就越大,如果分支下的样本完全属于同一类,熵就等于0。构造树的基本思路,是随着树的深度,也就是层数的增加,让熵快速降低,熵降低的速度越快,代表决策树分类效率越高,决策树最大的优点是天然的可解释性。苹果之所以是好苹果,是因为它又大又红又甜,它的缺点也很明显,数据都是有特例的。
如果一棵树能将训练样本完美分类,那它一定是过拟合的,解决的办法很简单,去掉一些分支。“剪枝”有两种,预剪枝是在训练开始前规定条件,比如树达到某一深度就停止训练;后剪枝则是先找到树,再依据一定条件如限制叶子节点的个数,去掉一部分分支。
【数据挖掘】决策树零基础入门教程,手把手教你学决策树!_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1T7411b7DG/?spm_id_from=333.337.search-card.all.click&vd_source=23dd4249b2e4e05d2a24fb7ba074103b (图1 根据属性构建节点)
(图2 如何判别用于分类的属性其效果是否满意)
我对图2的理解是,某个属性将数据分类为不同的集合,再对集合中的数据根据实际最后想要的分类结果(如,最终只是想知道这些数据是男性还是女性)进行统计,最后计算这个集合的基尼值,如果该属性分类结果有多个集合,则还需要对这些集合的基尼值取加权平均。基尼系数越低,说明该属性越好地对数据进行分类。
(图3 构建一棵决策树)
根据处理数据类型的不同,决策树又分为两类:分类决策树与回归决策树。区分它们很简单,将苹果单纯的分为好与坏的都是分类树,如果能为苹果的好坏程程度打分的,就是回归树。分类决策树可用于处理离散型数据,回归决策树可用于处理连续型数据。而上述的介绍比较偏向于分类决策树,所以这一节主要介绍回归决策树。
回归决策树常用在GBDT等算法,相关学习链接如下:
Regression Tree 回归树 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/82054400 分类回归树(classification and regression tree, CART)模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。
知乎文章中该计算式的0是(4.50-4.50)^2的结果,其中第一个4.50是第一个x的s值,第二个4.50是c1值。
什么是随机森林?【知多少】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11i4y1F7n4/?spm_id_from=333.788.recommend_more_video.-1&vd_source=23dd4249b2e4e05d2a24fb7ba074103b 森林里有很多树,随机森林有很多决策树,随机森林是决策树的升级版。
随机指的是树的“生长过程”,世上没有两片相同的树叶,随机森林中的树也各不相同。在构建决策树时,我们会从训练数据中有放回的随机选取一部分样本,同样的,我们也不会使用数据的全部特征,而是选取部分特征进行训练,每棵树使用的样本和特征各不相同,训练的结果自然也不同。为什么要这么做呢?在训练的最初,我们并不知道哪些是异常样本,也不知道哪些特征对分类结果影响更大,随机的过程降低了两者对分类结果的影响。随机森林的输出结果由投票决定,如果大部分决策树认为测试数据是好苹果,那我们就认为它是好苹果,这很像是人类的民主决策,虽然每个人拥有的信息、推理过程和结论各不相同,但当每个人拥有投票权时,往往能做出较优的决策。因为树与树之间的独立性,它们可以同时训练,不需要花费太长时间,随机的过程让它不容易过拟合,能处理特征较多的高维数据,也不需要做特征选择,合理训练后准确性很高,不知道使用什么分类方法时,先试试随机森林准没错。
在机器学习中,随机森林属于集成学习,也就是将多个模型组合起来解决问题,这些模型会独立学习、预测、再投票出结果,准确度往往比单独的模型高很多。除了决策树,还可可以使用神经网络等其他模型,同样的,集成学习内部不必是同样的模型,神经网络和决策树可以共存于一个系统中。
GBDT论文https://arxiv.org/pdf/1603.02754.pdf
什么是 GBDT(梯度提升树)?【知多少】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1U5411n7vH/?spm_id_from=333.337.search-card.all.click&vd_source=23dd4249b2e4e05d2a24fb7ba074103b 虽然GBDT同样由许多决策树组成,但它与随机森林有许多不同。其中之一是GBDT中的树都是回归树 。
GBDT中的每棵树都建立在前一棵树的基础上,以苹果打分为例,我们会先训练一棵树,大体预测一下苹果们的分数,再去训练一棵树去预测它们与真实分数间的差距,如果两者相加仍与真实分数存在差距,我们再训练第三棵树预测这部分差距,重复这个过程不断减少误差,将这些树的预测值加起来,就是苹果的分数。
除了苹果,被评分的还可以是网页、商品、电影,通过预测关联程读、点击率或是用户的喜好程读来排序,GBDT在搜索、广告、推荐系统等领域有着广泛应用,能处理标签、数值等各类数据,解释性强,这些都是GBDT的优点。不过由于树与树之间的相互依赖,需要较长的训练时间。
运用多个模型共同解决问题,GBDT自然属于集成学习,像这类一个模型依赖于上一个模型,共同逼近正确答案的方法称为Boosting提升。与随机森林类似,模型间相互独立共同投票出结果的方法,则被成为Bagging装袋,还有一种Stacking堆叠,是在多个模型的基础上放置一个更高层的模型,将底层模型的输出作为它的输入,由它给出最终的预测结果。
记住,GBDT只用到了一阶导数!!!
【随机森林 & GBDT】随机森林如何理解?GBDT如何学习?美女算法专家给你讲解随机森林和GBDT算法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt411j7KH/?spm_id_from=333.337.search-card.all.click&vd_source=23dd4249b2e4e05d2a24fb7ba074103b
什么是 XGBoost?【知多少】_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1yq4y1z7jK/?spm_id_from=333.337.search-card.all.click&vd_source=23dd4249b2e4e05d2a24fb7ba074103b 【通俗易懂】XGBoost从入门到实战,非常详细 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/258564378 XGBoost超详细推导,终于有人讲明白了! - 腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1513111 XGBOOST是GBDT的优秀版本。XGBoost的整体结构与GBDT一致,都是训练出一棵树的基础上,再训练下一棵树,预测它与真实分布间的差距,通过不断训练用来弥补差距的树,最终用树的组合实现对真实分布的模拟。
当然XGBoost有自己的独特之处,我们训练模型通常是定义一个目标函数,然后去优化它,XGBoost的目标函数包含损失函数和正则项两部分。
损失函数代表着模型拟合数据的程度,我们通常用它的一阶导数指出梯度下降的方向,XGBoost还计算了它的二阶导数,并应用了泰勒展开式,进一步考虑了梯度变化的趋势,拟合更快、精度更高。
正则项则被用来控制模型的复杂程度,叶子节点越多,模型越大,不仅运算时间长,超过一定限度后,还会过拟合,导致分类效果下降。XGBoost的正则项则是一个惩罚机制,叶子节点的数量越多,惩罚力度越大,从而限制它们的数量。
数学原理外,XGBoost最大的改进是大幅度提升了计算速度,树的构建中,最耗时的部分是确定最佳分裂点而进行的特征值排序。XGBoost在训练前会先将特征进行排序,存储为Block结构,此后重复使用这些结构,从而减少计算量,善于捕捉复杂数据之间的依赖关系,能从大规模数据集中获取有效模型,在实用性上支持多种系统和语言,这些都是XGBoost的优点。它同样有缺陷,比如在高维稀疏特征数据集,和小规模数据集上表现不是很好。
在XGBoost后还出现LightGBM、CatBoost等Boosting方法。