怎么评价网站做的好坏,如何做外链,密云网站制作案例,注册城乡规划师考试时间20231、Adaboost算法原理#xff0c;优缺点#xff1a;
理论上任何学习器都可以用于Adaboost.但一般来说#xff0c;使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树#xff0c;Adaboost分类用了CART分类树#xff0c;而Adaboost回归用了CART回归树。
Adaboost…1、Adaboost算法原理优缺点
理论上任何学习器都可以用于Adaboost.但一般来说使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树Adaboost分类用了CART分类树而Adaboost回归用了CART回归树。
Adaboost算法可以简述为三个步骤
(1)首先是初始化训练数据的权值分布D1。假设有N个训练样本数据则每一个训练样本最开始时都被赋予相同的权值w11/N。
(2)然后训练弱分类器hi。具体训练过程中是如果某个训练样本点被弱分类器hi准确地分类那么在构造下一个训练集中它对应的权值要减小相反如果某个训练样本点被错误分类那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器整个训练过程如此迭代地进行下去。
(3)最后将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后加大分类误差率小的弱分类器的权重使其在最终的分类函数中起着较大的决定作用而降低分类误差率大的弱分类器的权重使其在最终的分类函数中起着较小的决定作用。
换而言之误差率低的弱分类器在最终分类器中占的权重较大否则较小。
Adaboost的主要优点有
1)Adaboost作为分类器时分类精度很高。
2)在Adaboost的框架下可以使用各种回归分类模型来构建弱学习器不用对特征进行筛选非常灵活。
3)作为简单的二元分类器时构造简单结果可理解。
4)不容易发生过拟合。
Adaboost的主要缺点有
1)对异常样本敏感异常样本在迭代中可能会获得较高的权重影响最终的强学习器的预测准确性。
算法推导见笔记。
2、GBDT算法原理
GBDT在BAT大厂中也有广泛的应用假如要选择3个最重要的机器学习算法的话个人认为GBDT应该占一席之地。
基本思想积跬步以至千里每次学习一点。先用一个初始值来学习一棵决策树叶子处可以得到预测的值以及预测之后的残差然后后面的决策树就是要基于前面决策树的残差来学习直到预测值和真实值的残差为0。最后对于测试样本的预测值就是前面许多棵决策树预测值的累加。
GBDT的思想可以用一个通俗的例子解释假如有个人30岁我们首先用20岁去拟合发现损失有10岁这时我们用6岁去拟合剩下的损失发现差距还有4岁第三轮我们用3岁拟合剩下的差距差距就只有一岁了。如果我们的迭代轮数还没有完可以继续迭代下面每一轮迭代拟合的岁数误差都会减小。
GBDT也是迭代使用了前向分布算法但是弱学习器限定了只能使用CART回归树模型.(GBDT的会累加所有树的结果而这种累加是无法通过分类完成的因此GBDT的树都是CART回归树而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树))
它的每一次计算都是为了减少上一次的残差而为了消除残差我们可以在残差减小的梯度方向上建立模型,所以说在GradientBoost中每个新的模型的建立是为了使得之前的模型的残差往梯度下降的方法与传统的Boosting中关注正确错误的样本加权有着很大的区别。
GBDT通过多轮迭代,每轮迭代产生一个弱分类器每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。
通过损失函数的负梯度来拟合我们找到了一种通用的拟合损失误差的办法这样无轮是分类问题还是回归问题我们通过其损失函数的负梯度的拟合就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。
3、GBDT算法步骤
损失函数主要有指数损失、对数损失、均方差、绝对损失
让损失函数沿着梯度方向的下降。这个就是gbdt 的 gb的核心了。 利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。gbdt 每轮迭代的时候都去拟合损失函数在当前模型下的负梯度。
由于上述高偏差和简单的要求每个分类回归树的深度不会很深。最终的总分类器 是将每轮训练得到的弱分类器加权求和得到的(也就是加法模型)。
对于回归问题
对于分类问题样本输出不是连续的值而是离散的类别导致我们无法直接从输出类别去拟合类别输出的误差。
主要有两个方法一个是用指数损失函数此时GBDT退化为Adaboost算法。另一种方法是用类似于逻辑回归的对数似然损失函数的方法。也就是说我们用的是类别的预测概率值和真实概率值的差来拟合损失。
4、gbdt 如何构建特征
gbdt 本身是不能产生特征的但是我们可以利用gbdt去产生特征的组合。利用gbdt去产生特征的组合再采用逻辑回归进行处理增强逻辑回归对非线性分布的拟合能力。
我们使用 GBDT 生成了两棵树两颗树一共有五个叶子节点。我们将样本 X 输入到两颗树当中去样本X 落在了第一棵树的第二个叶子节点第二颗树的第一个叶子节点于是我们便可以依次构建一个五纬的特征向量每一个纬度代表了一个叶子节点样本落在这个叶子节点上面的话那么值为1没有落在该叶子节点的话那么值为 0。于是对于该样本我们可以得到一个向量[0,1,0,1,0] 作为该样本的组合特征和原来的特征一起输入到逻辑回归当中进行训练。实验证明这样会得到比较显著的效果提升。
补充
GBDT选择特征的细节其实是想问你CART Tree生成的过程。CART TREE 生成的过程其实就是一个选择特征的过程。
选择特征是遍历每个特征和每个特征的所有切分点找到最优的特征和最优的切分点。多个CART TREE 生成过程中选择最优特征切分较多的特征就是重要的特征。
5、GBDT 如何用于分类
参考https://www.cnblogs.com/ModifyRong/p/7744987.html
gbdt 无论用于分类还是回归一直都是使用的CART 回归树。这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练的。这里的残差就是当前模型的负梯度值 。这个要求每轮迭代的时候弱分类器的输出的结果相减是有意义的。残差相减是有意义的类别相减是没有意义的。
方法流程
(1)我们在训练的时候是针对样本 X 每个可能的类都训练一个分类回归树。举例说明目前样本有三类也就是 K 3。样本 x 属于 第二类。那么针对该样本 x 的分类结果其实我们可以用一个 三维向量 [0,1,0] 来表示。0表示样本不属于该类1表示样本属于该类。由于样本已经属于第二类了所以第二类对应的向量维度为1其他位置为0。
针对样本有 三类的情况我们实质上是在每轮的训练的时候是同时训练三颗树。第一颗树针对样本x的第一类输入为(x,0)。第二颗树输入针对 样本x 的第二类输入为(x,1)。第三颗树针对样本x 的第三类输入为(x0)。
在这里每颗树的训练过程其实就是就是我们之前已经提到过的CATR TREE 的生成过程。在此处我们参照之前的生成树的程序 即可以就解出三颗树以及三颗树对x 类别的预测值f1(x),f2(x),f3(x)。那么在此类训练中我们仿照多分类的逻辑回归 使用softmax 来产生概率则属于类别 1 的概率。
这样我们可以遍历所有特征的所有特征值找到让均方损失最小的特征以及其对应的特征值。生成三颗树后对于测试样本预测概率。
6、优缺点
目前GBDT的算法比较好的库是xgboost。当然scikit-learn也可以。
GBDT主要的优点有 可以灵活处理各种类型的数据包括连续值和离散值处理分类和回归问题。 在相对少的调参时间情况下预测的准备率也可以比较高。这个是相对SVM来说的。 可以用于筛选特征。
4)使用一些健壮的损失函数对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有
1)由于弱学习器之间存在依赖关系难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
7、GBDT和随机森林对比
相同点
1.都是由多棵树组成
2.最终的结果都是由多棵树一起决定
不同点
(1)随机森林的子树可以是分类或回归树而GBDT只能是回归树
(2)基于bagging思想而gbdt是boosting思想即采样方式不同
(3)随机森林可以并行生成而GBDT只能是串行
(4)输出结果随机森林采用多数投票GBDT将所有结果累加起来
(5)随机森林对异常值不敏感GBDT敏感随进森林减少方差GBDT减少偏差
8、GBDT和随机森林哪个容易过拟合
随机森林因为随机森林的决策树尝试拟合数据集有潜在的过拟合风险而boosting的GBDT的决策树则是拟合数据集的残差然后更新残差由新的决策树再去拟合新的残差虽然慢但是难以过拟合。