【量化课堂】决策树及其主要 Ensemble 算法的区别和联系 【记录我的学习】

本文主要是介绍【量化课堂】决策树及其主要 Ensemble 算法的区别和联系 【记录我的学习】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言: 本文大致讲讲决策树和它的两种主要优化分支 --Bagging 和 Boosting 下的一些重要算法,对于各个算法的详细知识感兴趣的可以看论坛其他文章:《【量化课堂】随机森林入门》,《【量化课堂】决策树入门及 Python 应用》。本文是小编随笔, 例子不恰当之处请大家不要打小编。-_-#-_-#

本文由 JoinQuant 量化课堂推出 。难度标签为入门,理解深度标签:level-0作者: 大白
编辑: 肖睿

关键词:决策树(Decision tree),随机森林(Randomforest),Boosting, Bootstrap, Bagging, AdaBoost(自适应性 Boosting), Gradient Boosting(梯度提升 boosting) ,GBDT(梯度提升决策树), XGBoost, LightGBM

 

本章分为:

1,这些家伙是什么,有什么区别?
决策树 Decision tree
Boostrap
套袋法(Bagging)
Boosting
Gradient Boosting
XGBoosting
LightGBM

2,举个栗子说明一下 
3,补充和扩展 

 

1,这些家伙是什么,有什么区别?

1,家族关系谱:

首先直接放图,这是这一家子的大致关系
比较.PNG

决策树 DECISION TREE:

决策树是一种非参的,监督式的学习方法;是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值期望值大于零的概率,判断其是否会发生的分析方法,是直观运用概率分析的一种图解法。由于这种决策树分支的图形很像树的枝干,故称决策树。下面是一个决策树的例子:
决策树,兔.PNG

BOOSTRAP:

Boostrap 是一个应用广泛且超级实用的统计工具,boostrap 在英文里原意 “靴带”,现意味不靠他人的帮助,自己取得成功。正如其含义,boostrap 是一种通过有放回的抽样方式生成更多样本集,从而达到扩大样本集,来更好研究样本的目的。其过程如下图所示:

33.PNG

套袋法(BAGGING):

Bagging 是一种有效的降低学习器结果方差的方法。其原理是通过 boostrap 的方式生成更多样本的样本,在每个样本的样本上用学习器学习,最后投票得出最终结果。
其流程如下:

22.PNG

RANDOMFOREST:

随机森林其实就是 Bagging 在决策树上的实现,只不过新加入一个特色及用 boostrap 取样本时不仅随机抽样,还限定了特征的数量,丰富了森林里的树木种类。

BOOSTING:

Boosting 方法(代表是 Adaboost)是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,(在这个系列里每个新的学习器都是针对对上一个学习器不足的补充)然后以一定的方式将他们组合成一个预测函数。Boosting 是一种提高任意给定学习算法准确度的方法。

与 Random Forest 不同的是:Random Forest 是随机生成新树的,Boosting 每一个新的学习器却都是针对性提升上一棵树不足的。Random forest 每棵树对最终结果影响相同,Boosting 根据使用方法不同,投票比例也不同。

11.PNG
(图片来自 prml p660)

GRADIENT BOOSTING:

Gradient Boosting 是 Boosting 方法的一种。不同于 boosting 代表性的 Adaboost,Gradient Boosting 每一次的计算是为了减少上一次学习器的残差,从而在残差减少梯度方向上建立新的模型。Gradient Boosting 是沿着残差减小的方向一步步优化算法的,和初始的 boosting 方法中放大错误分类数据比重以求新学习集更加关注错误分类点的方法有明显不同。

GBDT(GRADIENT BOOSTING DECISION TREE):

Gradient Boosting 应用于决策树的结果

XGBOOSTING:

XGboost 是 Gradient Boosting 的改进,其改进的方面包括:
1, 使用了 2 阶泰勒展开寻找梯度,比之前的一阶效率更高,结果更好
2, 叶节点方面 XGboost 一方面限制了叶节点总数,另一方面加入了 L2 正则项,用来防止过拟合
3, 不仅支持基于 CART 的决策树支持线性分类器作为基本学习器
4, 改进了(弱化了?)划分点查找算法,过去一般直接用遍历或贪心算法寻找最优分割点。XGboost 使用候选分割点;分布式加权直方图等方法解决了数据无法一次载入内存导致效率低的问题。此外分布式直方图的方法也使多线程运行成为可能。(据说会损耗一些精度,但不多)
5, 对缺失值的处理 — 稀疏感知算法
6, 使用了交叉验证(cross validation)
7, 并行化处理提高速度,并使用一些 C/C++ 代码进一步提高运行速度

LIGHTGBM:

微软做的 boosting 包,开源至今差不多有 1 年零两个月了,算是目前最优秀的 boosting 算法之一。和 XGBoost 类似,改进如下:

1,最最重要的就是深度约束(level-wise)变为叶约束(leaf-wise)的改变了,大大提升了速度和精度。
LGBM1.PNG

LGBM2.PNG

2,并行也是一个重点,实现了:
1)特征并行(feature parallel)
2)数据并行(data parallel)
3)投票并行(voting parallel)

这三种并行都是加速数据交互的,对精度没有影响。换句话说处理大数据量时使用它们会变得非常快,小数据量体验不明显。

3,其他的提升
其他部分的提升就和 XGboost 差别不大了,包括:
1, DART: Dropouts meet Multiple Additive Regression Trees
2, L1/L2 正则
3, Bagging
4, Column (feature) 子分类(和随机森林干的一样)
5, 接着已有的 GBDT 模型输入继续训练
6, 接着已有的打分结果继续训练
7, 权重训练
8, 训练与评价结果输出并行
9, 多重数据验证(Multi validation data)
10, 多指标(Multi metrics)
11, Early stopping (both training and prediction)
12, 叶系数的预测 Prediction for leaf index

 

 

2,举个栗子

最后举个栗子把这些东西串起来吧。

有一个医学专(砖)家,他看过很多很多病人,还记了小本本来归类这些病人的特征和病情来方便以后诊断。有一天来了个病人,这个专家就问病人了,“大爷您贵姓?多少岁,哪不舒服,病情怎么样?” 大爷说 “我姓李,48,最近老吐痰,老咳嗽,还发烧…”。这个专家拿出他的小本本一查 “” 属性:“姓李”,“年龄 48”,“吐痰”,“咳嗽”,“发烧”…, 根据我的小本本以前这样的病例有 80 个,有 76 个是感冒,成,就诊断他是感冒了!” 这个专家就是棵 决策树 (专家大呼:“我不是树,我是人” 但小编并不理会)

镜头一转,来到医院 A,同样的病人来医院 A 治病。医院有很大的病例数据库,有 100 个医学专家通过学习数据库的一部分知识形成了自己的诊断方案。医院想:“我财大气粗,为了提供更好的医疗服务,我让 100 个专家做诊断,然后他们投票决出最后的判断”。 随机森林 完成

医院 B 就不爽了,你这治疗方案太受欢迎,把客户都抢走了,我要用科学的治疗方案来击败你。医院 B 想了想,大家投票不一定针对到用户情况,我先从我的 100 个专家里找一个最好的先给病人做一个诊疗方案,再根据第一个专家的不足找第二个,根据第二个再找第三个…… 最后不同专家再根据他们诊断的表现以不同权重投票。这样岂不是更针对病人痛点?Boosting 方法就被这群人建立起来了

到了医院 C 想搞差异化,你医院 B 根据上一个专家的全部不足找新专家,那我就根据上一个专家判断最偏颇的方向找专家,虽然听起来差不多,但我的差异化说不定就能更好。Gradient Boosting 产生了

更加财大气粗的医院 D 来了,他觉得虽然整个市场的大格调基本确定,但我可以通过提升整个诊疗的流程大大小小的细节来取胜啊!于是医院 D 在 C 的基础上改进了很多,于是找偏颇的方向更快更准,纠结专家,诊疗的速度也大大加快,整个医院的硬件设施也前所未有的提高。这差不多就是 XGBoost 了

突然有股叫大数据的潮流吹来,本来医院 D 已经在医院 C 一分钟治疗 10000 人的基础上提升了 10 多倍速度,但新的要求是:一分钟不行,最多给你 3 秒,10 万人也不行,我现在有全世界的数据,你得分秒内召集几百几千个专家,这些专家每一个的知识得相当于以前一个医院那没多,还得分秒内服务数 10 倍的病人,最后治疗的精度不能下降。LightGBM 出场了,虽然精度提高不多,但速度大大加快了。

 

3,补充和扩展

故事讲完了,决策树家族的恩恩怨怨纠纠葛葛也就到这了,对这方面感兴趣的读者可以看看 《【量化课堂】随机森林入门》,《【量化课堂】决策树入门及 Python 应用》,针对每一部分的原理和 python 实现有特别的讲解。

 

本文由 JoinQuant 量化课堂推出,版权归 JoinQuant 所有,商业转载请联系我们获得授权,非商业转载请注明出处。文章更迭记录:
v1.0,2018-01-12,文章上线

这篇关于【量化课堂】决策树及其主要 Ensemble 算法的区别和联系 【记录我的学习】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048716

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd