决策树

决策树是一种简单、常用的基础模型。之所以说它简单,不仅因为它的思想原理简单具体、贴近实际,它并不需要像线性回归模型一样用一个数学公式来表征,而是由规则来抽象。说它基础,是因为它是一系列复杂强大的模型的基础。

决策树的基本思想是通过将数据不断划分,使原来混乱的数据信息逐渐清晰。举一个简单的例子:如果你去相亲,你可能以外貌为第一特征来决定是否继续往下考虑;如果外貌过关了,你可能还会考虑职位和收入水平;如果收入水平也过关了,再去考虑品质……这种层层筛选的过程就蕴含着决策树的朴素思想。

决策树不局限于数学模型的具体形式,它既可以用来作分类,也可以用来作回归,二者的基本思想类似,处理方法上有差别。

分类树

根据前文的描述,应该有两个问题:1、如何表征数据的混乱或清晰的程度?2、如何将数据划分?

一个分类变量,设想一下极端情况,如果都是True或False,那它取True或False的概率就是0或1,这些都是100%确定的,你无需做任何猜测,这种情况下数据就是最清晰的;反之,如果一个变量各有50%的True或False,你甚至没办法预测一个样本更有可能是True还是False,这种情况下数据就是最混乱的。

有两个指标可以用来衡量数据的不确定程度:基尼系数(并非经济学上的概念)

具体就不推导了,可见当p接近0或1时,这两个指标都接近于0,表示不确定度最低,信息最为清晰;当p接近0.5时,不确定度最高,信息最为混乱。

第一个问题解答了,第二个问题如何来进行数据划分?分类树的主要过程如下:

  • 首先计算分类变量在不做任何划分下的熵或基尼系数
  • 计算每一个特征在各个水平下的划分的加权熵或基尼系数
  • 选择令分类变量熵或基尼系数减少得最多的特征作为节点往下划分
  • 重复以上过程,直至数据被清晰划分

决策树的过程就是不断将数据集细分的过程,可是如果细分过头了,模型的泛化能力就差,在新的测试数据中预测准确率就低。

那么如何解决决策树过拟合的问题?剪枝。迭代过程无需细分那么多步,决策树无需有那么多层。

剪枝有2种思路:一种是预剪枝,决策树每次分裂时,只有分裂后的RSS减小超过某一阈值才分裂,但这种方法只看眼前一步,看不到后面的几步,因此不免过于短视,容易错过最优的模型。另一种后剪枝,就是先就生成一棵大树,然后再剪去那些细枝末节。

剪枝之后的决策树不仅模型变得更简单,更易于解释,测试准确率也提升了(虽然提升得不多)。

回归树

决策树不仅可以用来分类,也可以用来回归。回归树与分类树的差别主要在于两点:

  • 回归树并不采用熵或基尼系数,而是将连续的特征采用分割点分割成离散的区间,以左右两侧的RSS最小为优化目标;
  • 分类树最后以划分空间内点的投票作为分类结果,而分归树最后以划分空间内的平均值作为回归值。

通过交叉验证证明不用剪枝,构建出的回归值是离散的,通过把新的数据沿着决策树分枝归类,然后赋予其一个回归值。

决策树的优缺点

  • 解释性强,比线性回归更强
  • 更贴近人的决策模式,易于理解
  • 易于可视化(高维线性回归模型则不能)
  • 可以直接处理分类型变量而不需要创建哑变量
  • 决策树的准确性不是很高

前文提到决策树具有容易过拟合、准确性不太高的缺点,可以用装袋随机森林提升方法来对组合大量的决策树,从而提高预测效果。

装袋

装袋法(Bagging)又称自助法聚集(bootstrap aggregation),联想到之前提到的自助法的思想方法,对于n个同方差σ2的观测,其平均值的方差为σ2/n,这说明求平均可以降低方差。那么自然地可以进一步联想,通过自助法抽取n个样本,建立n个决策树模型,然后对n个预测结果求平均,也可以降低方差,提高准确性。

装袋法通过自助法抽样B个样本,建立B棵高方差的决策树,不必剪枝。对于分类问题,B个分类结果投票选最多的就好;对于回归问题,B个回归值求平均。B取大一点也不会造成过拟合。装袋法并不仅适用于决策树,但对决策树尤其有用。

随机森林

随机森林是装袋的延伸,不同之处在于:每一次用自助法建立的样本之后并不用全部特征去建立决策树,而是同样对特征也进行抽样,每次抽m个特征(m一般为√p,当m=p时,随机森林就变成装袋法了)。为什么每次不用全部而只有部分特征?在之前进行多元线性回归模型拟合时有一个问题必须注意:特征之间的相关性。对于装袋法来说,每次都用所有特征,如果有一些强特征,导致每棵树的分裂方式都类似,这样不同树之间的预测变量就高度相关,这样即使求平均,能减小方差也有限。

随机森林的思想就是每次只抽一部分特征来建模,在大量的树下确保所有的特征都会被使用,这样平均之下就会减弱不同树之间特征的高度相关性,以减小总体的方差,达到总体的最优。

提升

提升(boosting)与装袋类似,都是集成学习算法,基本思想方法都是把多个弱分类器(但正确率要大于50%否则没有集成的意义)集成成强分类器。不过与装袋不同,装袋的每一步都是独立抽样的,提升每一次迭代则是基于前一次的数据进行修正,提高前一次模型中分错样本在下次抽中的概率,打个比方就是给一个学生做一张卷子,每做完一次就把他做错的题抽出来让他继续做,直到他所有的题都能做对为止。

以下是经典的Adaboost算法流程:

为每个样本初始化权值w=1/n;开始迭代,在第t轮迭代中:

  1. 使用训练集训练分类器Ct,训练误差e=所有被分类错误样本的权值之和
  2. 计算分类器的权值为α=1/2ln((1−e)/e)
  3. 更新样本当前的权值wt:
    若分类正确,则减少权值,wt+1=wt∗e^−α;
    若分类错误,则加大权值,wt+1=wt∗e^α
  4. 将所有样本的权值归一化,使其相加为1。
    用生成的所有分类器预测未知样本X,最终结果为所有分类器输出的加权平均。

boosting的效果跟随机森林差不多。

详细文章:决策树、装袋、提升和随机森林 - 简书 (jianshu.com)

决策树、装袋、提升和随机森林的对比理解相关推荐

  1. 决策树、装袋、提升和随机森林

    决策树是一种简单.常用的基础模型.之所以说它简单,不仅因为它的思想原理简单具体.贴近实际,它并不需要像线性回归模型一样用一个数学公式来表征,而是由规则来抽象.说它基础,是因为它是一系列复杂强大的模型的 ...

  2. R语言决策树、bagging、随机森林模型在训练集以及测试集的预测结果(accuray、F1、偏差Deviance)对比分析、计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况

    R语言决策树.bagging.随机森林模型在训练集以及测试集的预测结果(accuray.F1.偏差Deviance)对比分析.计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况 ...

  3. 集成学习—随机森林原理(理解与论文研读)

    如果只想大致理解下随机森林的原理请看第一部分,第二部分是对原论文的研读(灰色引用标记的为证明或自己的理解),这部分可能需要花的时间比较长,不需要的可以忽略. 此外,文末列出来的参考视频,如果读论文还是 ...

  4. 对于随机森林的通俗理解

    原文:http://blog.csdn.net/mao_xiao_feng/article/details/52728164 对于随机森林的通俗理解 一.决策树 决策树是机器学习最基本的模型,在不考虑 ...

  5. 决策树Decision Tree 和随机森林RandomForest基本概念(一)

    文章目录 一.决策树介绍 1.1 什么是决策树 1.2 决策树种类 1.3 决策树学习过程 1.4 Entropy(熵) 1.5 information gain(信息增益) 1.6 信息论 1.8 ...

  6. 决策树(四)--随机森林与GBDT

    前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over- ...

  7. 决策树(八)--随机森林及OpenCV源码分析

    原文: http://blog.csdn.net/zhaocj/article/details/51580092 一.原理 随机森林(Random Forest)的思想最早是由Ho于1995年首次提出 ...

  8. 决策树(六)--随机森林

    原文: http://www.cnblogs.com/hrlnw/p/3850459.html 1.随机森林原理介绍 随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器.该分类器最早由Leo ...

  9. 关于随机森林的一些理解

    目录 随机森林简介 优缺点 优点 缺点 sklearn中随机森林参数 简单实现 小节 随机森林简介 随机森林是一种只关注决策树的集成学习方法,由Leo Breiman和 Adele Cutler提出, ...

最新文章

  1. python代码基础题-python第一部分基础题1-80题
  2. 微信在公众号增开了新广告位 这次是在图文消息头部
  3. linux java 查询mysql_Linux Java连接MySQL数据库
  4. Python 通过 pip 安装第三方模块成功,导入该模块失败的解决方法
  5. 使用阿里云火车票查询接口案例——CSDN博客
  6. oracle十进制函数语法,Oracle 十进制、二进制互相转换自定义函数
  7. 2021年五月下旬推荐文章(2)
  8. vmware中的linux虚拟机如何增加磁盘容量
  9. Zookeeper 概述与安装、配置参数、数据结构、选举机制、客户端命令
  10. 【生信进阶练习1000days】day4-Annotation包中mapIds函数的使用
  11. 报表类-金蝶K3一次查询所有供应商采购价格
  12. 解读常见传感器的CFA排列(彩色滤色矩阵,Color Filter Array)
  13. 筛选后系列填充_不会用Excel做数据筛选,老板叼的你没话说!
  14. 凸包(Graham扫描法构建)
  15. miui11可用的位置模拟器_MIUI11内测体验包
  16. 传奇修改完怪物血量后服务器不变,传奇怪物的血量调整方法(图文)
  17. 信息收集之基础端口扫描《诸神之眼——Nmap网络安全审计技术揭秘》总结一
  18. PL/0语言 词法分析
  19. GitHub 上有哪些机器人、无人机、自动控制等方面的有趣项目
  20. 三维激光扫描技术在工程领域中的应用

热门文章

  1. 文件的下载与保存,以及mp3文件的播放
  2. python -flask简介
  3. Lesson 13-14 How often do you exercise?
  4. Android tcpdump
  5. Adobe XMP SDK编译
  6. POI 导出Excel
  7. 复杂网络——常见的论文下载和真实数据集下载网站
  8. Winform从入门到精通(41)——FileSystemWatcher(史上最全)
  9. spark解决Illegal pattern component: XXX NoSuchFieldError: KRYO_SARG_BUFFER
  10. matlab语法介绍——fft()、ifft()、fftshift()