1.集成学习(Ensemble Learning)

集成学习就是将多个弱分类器组合成为一个强分类器。比起几千年才出一个的力能扛鼎的项羽来说,我们找十几个匹夫把鼎抬过去会更简单一些。这就是集成学习的思想,允许单个模型缺陷的存在,使用多个模型的组合去消除掉单个模型的这种缺陷,达到更理想的结果。
所以我们需要思考两个问题:
1.在这种集成思想下,如何训练单个模型。
2.使用怎样的方式将多个模型组合起来。
围绕上面的两个问题,下面我们介绍一下常用的几种集成学习的套路。

1.1 Bagging(bootstrap aggregating)

bootstrap:也称为自助法,是一种有放回的采样方式。bagging模型是一种并行的集成方法,即所有的模型是可以并行训练的。
随机森林(random decision forests):这个名字本身就已经告诉了我们随机森林是什么,由多棵决策树组成的森林。并且每棵树的训练数据使用bootstrap随机生成,树分裂的过程中使用的特征也是bootstrap随机生成的。
最后bagging输出的结果:如果是分类的话,就多个模型进行投票选出最优解。如果是回归的话,就将多个模型产生的结果求平均数。

1.2. Boosting

Boosting是一种序列化集成方法,即前面的模型训练完成之后才可以进行后面模型的训练。跟bagging随机生成待选特征和训练集数据,以差异化弱分类器不同的是。Boosting通过改变不同样本的权重,来实现差异化。具体的思想就是,每一轮训练的时候增加上一轮分错数据的权重,减小上一轮分对数据的权重。对于准确率高的模型赋予较高的权重,准确率低的模型赋予较低的权重。
Adaboost:
下面我们讨论Boosting思想的一种具体的实现-Adaboost。
因为Adaboost是一种boosting的算法,所以我们这里主要考虑两个问题:1.样本权重如何确定 2.学习器的权重如何确定。
权重错误率:错误数据的权重和/所有数据的权重和
误差率:ek为t时刻模型的总体误差率

定义中间变量

更新t+1轮权重W的方式:

更新模型权重α的方式: α=ln(Δt)
Adaboost流程:
1.初始化第一轮的数据权重w=1/n
2.训练是的权重错误率最小的模型g(t)
3.更新t+1时刻的w权重,训练g(t+1),计算模型权重α。
4.训练完成后,对所有的学习器加权求和得到最终的结果。

1.3 Stacking

Stacking的思想就是训练多个模型,然后将多个模型的输出作为输入,训练一个新的模型。使用该模型进行最终的预测。跟前面两种思想不一样的是,stacking可以是不同的模型的堆叠,这些模型并不需要使用同一种算法。

2.GBDT 梯度提升决策树

GBDT使用残差拟合的方式来构建CART树,传统的梯度下降是直接对参数求导,使得参数沿着梯度的放下调节,最终使得损失最小。而GBDT是直接对函数F(x)进行求导,因为最终需要得到的是一系列的F(x)。
残差的计算公式是y-F(x)
然后以t时刻的残差作为y,来训练t+1时刻的模型。
二分类
GBDT天然的适合与回归问题,如果进行分类问题,我们的思路和逻辑回归一样。拟合预测结果的对数几率,公式如下:

使用上面的残差来拟合一棵新的回归树;
最后将所有的学习器组合起来得到最终的学习器F(x);
多分类
多分类时候的思想和逻辑回归多分类一致,可以看到下面的公式类似于softmax公式,使用当前学习器的对数概率除以所有的学习器概率之和。

特征选择
我们还可以使用GBDT来进行新特征的构造。
其中特征的重要程度是特征在每棵树中的重要程度的平均值。
特征在每棵树中的重要程度是其在该树中的收益之和。
如下图所示,我们先构造了一颗GBDT树,然后输入样本x,假设其在第一棵树中落入节点二,第二棵树中落入节点一,那么使用所有的叶子节点构造的新的特征向量为[0,1,0,1,0],其中向量长度为所有树中的叶子节点的数量,向量中该节点所在的叶子节点位置为1,其它的位置为0。
然后可以把新的特征和原始特征组合在一起进行模型的训练,往往能够很好的提升模型的准确度。

3.XGBoost

XGBoost是GBDT思想在工程上的一种实现,那我们就基于上面GBDT来谈谈XGBoost都做了哪些不同的事情。这样也就了解了SGBoost。

3.1目标函数

传统的GBDT启发式的生成树,每一步都选择对于当前收益最大的特征和切分点作为分裂的条件。但是XGBoost使用目标式的生成一棵树,也就是首先定义一个目标函数,然后不断的优化这个目标函数使得整体的损失最小。
下面的公式就是目标函数的定义,由两部分组成:第一部分是损失项,代表了模型的准确性;第二部分是惩罚项,表示出模型的复杂程度。

由GBDT我们知道,整体优化的过程与传统的SGD不同。因为SGD是对数值进行求导,而我们是对函数本身求导。如下所示,每一次优化我们都新加一个f(xi)来拟合上一次的残差。

使用泰勒二阶展开来近似我们的目标函数,下图所示其中gi表示一阶导数,hi表示二阶导数。对于t时刻来说,前t-1时刻的树不会再变化,所以其复杂度也不会再变化,我们将其看做是常数项constant。所以t时刻的目标函数就是:损失 + 一阶导 + 二阶导 + t时刻的复杂度 +常数项;

对于上面的式子我们将所有的常数项去掉,就得到了目标函数最终简化的形式。注意,上式中第一项的损失是对t-1时刻所求的,对于t时刻来说它是不变的,也可以作为常数项去掉。

接着上面的公式我们进一步来简化一下目标函数,首先我们考虑一下如何定义一棵树,也就是目标函数中第一部分。当给定一个输入x的时候,树会找到x的位置,并且输出x的权重。这就是一个数的两部分,树的结构,叶子节点的值。那么用一个数组q表示树的结构,用w表示对应位置的权重。如下图所示,q(x)代表x在树中的下标信息,w表示x对应的权重。这样Ft(x) = wq(x)

下俩定义树的复杂度,由两部分组成:1.叶子节点的数量T 2.叶子节点权重的二范数

将上面对于树的定义以及复杂度的定义带入到简化后的目标函数中,我们得到下面的式子。我们简单的介绍一下,其中Ij表示某个叶子节点中的所有的节点,由之前我们定义F(x) = wq(x),再加上对于复杂度Ω的定义就有了下面的第二行。第二行的n表示对所有样本加和,也可以表示为所有叶子节点中的节点的加和,因为每一条样本肯定会落到某个叶子节点中。这样就将前面的损失和后面的复杂度求和统一在了T的范围,然后我们对于公共的部分进行合并就得到了第三行。

下面的推算是一个从特性到共性的过程,首先对于有两个参数G、H的式子得到x最小时为-G/H,此时式子的最小值为-1/2*G^2/H;然后将一阶导的和定义为G,二阶导的和定义为H;使用前面我们得到的规律就得到了参数w的最小值,以及目标函数的最小值。这是一个比较巧妙的过程。


下面来看一下我们整体的树的结构

3.2 定义树的结构

树结构的生成其实和GBDT差不多,贪婪式的寻找下一个用来分裂的特征,遍历这个特征中可以用来分割的点,选择使得目标收益最大的特征和切分点。
关于收益的计算,如下图所示,使用分裂后目标函数的值减去分裂之前的值,就是其对应的收益。

3.3 XGBoost和GBDT的区别

1.GBDT使用cart作为基学习器,XGBoost支持线性分类器
2.GBDT使用泰勒一阶展开近似目标函数,XGBoost使用泰勒二阶展开近似目标函数。
3.XGBoost中加入了正则项,考虑到了树的复杂度。
4.XGBoost会进行列的抽样。
5.XGBoost可以自动处理缺失值。

4.总结

本文中我们总结了集成学习的知识点,以及一些常用的继承学习的方法。包括Bagging思想的随机森林,使用Bosting思想的GBDT和XGBoost。基本的思想都是使用多个弱学习器组合成为一个强学习器,提高模型的整体性能。

5.look me up

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。
《定风波

【七代小丑/踩点/混剪/高燃】前方高能!欢乐与惊悚的踩点视觉盛宴!希斯莱杰诞辰40周年纪念。

集成学习_GBDT_XGBoost相关推荐

  1. 04 集成学习 - Boosting - AdaBoost算法构建

    03 集成学习 - Boosting - AdaBoost算法原理 十.AdaBoost算法构建 上一章最后说明了每个基模型的权值α是如何求得的,于是我就可以对模型进行更新操作了. 构建过程一 1.假 ...

  2. 集成学习(Ensemble Learning)

    在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好).集成学习就是组 ...

  3. 【组队学习】【30期】6. 树模型与集成学习

    树模型与集成学习 航路开辟者:耿远昊 领航员:姜萌 航海士:耿远昊 基本信息 开源内容:https://github.com/datawhalechina/machine-learning-toy-c ...

  4. 【组队学习】【29期】7. 集成学习(上)

    7. 集成学习(上) 航路开辟者:李祖贤.薛传雨.六一.杨毅远.陈琰钰 领航员:刘思含 航海士:李祖贤 基本信息 开源内容:https://github.com/datawhalechina/ense ...

  5. 秦州:西瓜书 + 南瓜书 吃瓜系列 10. 集成学习(下)

    Datawhale南瓜书是经典机器学习教材<机器学习>(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习. 航路开辟者:谢文睿.秦州 开源内容:ht ...

  6. 【组队学习】【27期】集成学习

    集成学习 论坛版块: http://datawhale.club/c/32-category/32 开源内容: https://github.com/datawhalechina/ensemble-l ...

  7. 【直播】李祖贤:集成学习答疑直播之八-- 集成知识点回顾与补充

    集成学习答疑直播之八-- 集成知识点回顾与补充 集成学习是首个横跨3个周期的长期组队学习,在第25期组队学习中进行到"第三期-模型融合与数据实战"阶段.组队学习期间,课程设计者每周 ...

  8. 【组队学习】【24期】集成学习(中)

    集成学习(中) 开源内容: https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearni ...

  9. 【直播】李祖贤:集成学习答疑直播之五 -- 常用集成思路

    集成学习答疑直播之五 – 常用集成思路   集成学习 是首个横跨3个周期的长期组队学习,在 第24期组队学习 中进行到"第二期-模型集成思路"阶段.组队学习期间,课程设计者每周针对 ...

最新文章

  1. 一张图追踪测序的大历史背景
  2. win 常用网络命令
  3. 华为首款Harmonyos摄像头,掀起家居安防大变革 华为首款HarmonyOS智能摄像头发布...
  4. ElasticSearch入门 —— 集群搭建
  5. 清空了回收站怎么找回?你没用过的方法
  6. 通过 Chrome Workspace 调试本地项目
  7. 前程无忧涉及网上黑市贩卖简历 盘前跌近5%
  8. MyBatis学习(01)之解决mapper绑定异常
  9. IDEA创建javaweb项目,及常见的请求和响应头
  10. docker 发布springBoot项目
  11. 工程经济作业1答案_工程经济学1、2、3、4(作业1答案)
  12. 快速安装tensorflow-gpu
  13. java 月的天数_Java获取某月天数
  14. IT安全面试问题汇总
  15. phpmywind教程:单页信息调用说明【进阶篇一】
  16. go html vue,[终极巨坑]golang+vue开发日记【三】,登陆界面制作(二)
  17. 算法与数据结构实战实验——线性数据结构实现与应用(使用java)
  18. MES系统价格具体跟哪些因素相关?
  19. Python求风向xy向量
  20. 海康摄像机sdk踩坑记述

热门文章

  1. 电视剧《天道》观后感
  2. 计算机鼠标由传感器来监视,2020年人教版九年级物理全册:16.4“变阻器”过关检测练习题D卷...
  3. 七零年代摄影师Robert Mapplethorpe
  4. pytorch_BCELoss的reduction参数理解
  5. Azure Key Vault 简介
  6. Oracle EBS 导入日记账提示警告 GL_INTERFACE 错误代码ECW1,EC11
  7. ecw2c认真有效地在线查找帮助!
  8. 网络与信息安全实验总结(报文监听与分析,漏洞扫描,逆向工程,安全产品)
  9. 【数学建模】十二(最后一篇):MATLAB CUMCM真题求解实例三:机理建模型
  10. 以前端的角度出发做好SEO需要考虑什么