1、Adaboost算法原理,优缺点:

理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络。对于决策树,Adaboost分类用了CART分类树,而Adaboost回归用了CART回归树。

Adaboost算法可以简述为三个步骤:

(1)首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值:w1=1/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 的第三类,输入为(x,0)。

在这里每颗树的训练过程其实就是就是我们之前已经提到过的CATR TREE 的生成过程。在此处我们参照之前的生成树的程序 即可以就解出三颗树,以及三颗树对x 类别的预测值f1(x),f2(x),f3(x)。那么在此类训练中,我们仿照多分类的逻辑回归 ,使用softmax 来产生概率,则属于类别 1 的概率。

这样我们可以遍历所有特征的所有特征值,找到让均方损失最小的特征以及其对应的特征值。生成三颗树后,对于测试样本预测概率。

6、优缺点:

目前GBDT的算法比较好的库是xgboost。当然scikit-learn也可以。

GBDT主要的优点有:

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

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

3) 可以用于筛选特征。

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的决策树则是拟合数据集的残差,然后更新残差,由新的决策树再去拟合新的残差,虽然慢,但是难以过拟合。

转自:博客园 - 深度机器学习

gbdt 算法比随机森林容易_机器学习(七)——Adaboost和梯度提升树GBDT相关推荐

  1. gbdt 算法比随机森林容易_机器学习军火库 | 浪漫算法 随机森林

    一.基本原理 顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的.在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行 ...

  2. gbdt 算法比随机森林容易_随机森林与GBDT

    Bagging策略 1.总样本数量是n个,从样本中重采样(有放回的)选出n个样本 ,会有约33.2%的样本不会被抽到 2.在所有属性上对这n个样本建立分类器(比如决策树,svm,lr) 3.重复步骤1 ...

  3. gbdt 算法比随机森林容易_用Python实现随机森林算法

    CDA数据分析师 出品 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩写)算法从训练数据 ...

  4. gbdt 算法比随机森林容易_聊聊GBDT和随机森林

    原标题:聊聊GBDT和随机森林 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区. 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  5. gbdt 算法比随机森林容易_随机森林、gbdt算法

    http://blog.csdn.net/songzitea/article/details/10035757 http://blog.csdn.net/holybin/article/details ...

  6. 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?

    随机森林(Random Forest)和梯度提升树(GBDT)有什么区别? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法. 随机森林是由很多 ...

  7. 【机器学习】集成学习之梯度提升树GBDT

    Boosting方法的核心思想是对错分类的样本给予更高关注度,也就是样本权重,在提升树中与之对应的就是残差,在梯度提升树中就是梯度了. Regression Decision Tree:回归树 回归树 ...

  8. 【机器学习】深入剖析梯度提升决策树(GBDT)分类与回归

    1. 梯度提升决策树概述 梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是以决策树为基学习器的一种Boosting算法,它在每一轮迭代中建立一个决策树,使当 ...

  9. 梯度提升树(GBDT)原理小结(转载)

    在集成学习值Adaboost算法原理和代码小结(转载)中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boos ...

最新文章

  1. P3605 [USACO17JAN]Promotion Counting晋升者计数
  2. 安卓没删干净导致报错
  3. mysql操作命令梳理(3)-pager
  4. javascript中的继承方式
  5. 时艳强对话酒儿:gate首发平台币的时机选择
  6. 内网通 去广告 代码_一文秒懂Facebook广告投放常见专业术语
  7. Java路径问题最终解决方案使用演示
  8. innerHTML和value的区别
  9. Oracle(三):视图、序列、同义词、索引
  10. 基于jquery的带事件显示功能的日历板插件calendar.js
  11. linux ssh环境,在Linux下ssh 环境的登录 和 文件拷贝
  12. 《C++ Primer》读书笔记—第六章 函数
  13. 《剑指offer》第二章小结(1)——链表的基本操作
  14. 北京大学生物信息学学习(6)隐含马尔可夫模型
  15. 最常使用Eclipse快捷键
  16. CTF密码学——常见编解码及加解密总结
  17. 软件产品需求分析思维导图
  18. 北邮 复习 软件工程_【真题回忆】2018北邮软件工程专业课真题回忆版
  19. bulk of the 用法_高中英语 | 10大词类详解+用法+考点,必须牢记,超全讲解!
  20. 爬取当当网评论(1)

热门文章

  1. 计算机网络分类(按覆盖范围分类)“名称、范围”
  2. ACMNO.9求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如:2+22+222+2222+22222(n=5),n由键盘输入。 输入 n 输出 a=2 时
  3. ArcFace - 人脸识别
  4. 基于HTTP协议的几种实时数据获取技术
  5. 修改python编码
  6. SQL Server 2014聚集列存储索引
  7. Zookeeper常用命令使用
  8. 前端资源预加载并展示进度条
  9. angular.foreach 格式
  10. Python设计模式面向对象编程