决策树与随机森林

1 决策树原理

决策树的目标是建立分类预测模型或回归预测模型口决策树得名于其分析结论的展示方式类似一棵倒置的树

  • 分类树回归树分别对应分类预测模型和回归预测模型,分别用于对分类型和数值型输出变量值的预测。

  • 决策树体现了, 对样本数据的不断分组过程

  • 决策树体现了输入变量和输出变量取值的逻辑关系。

  • 决策树的最大特点是:它的预测是基于逻辑的即采用IF … THEN …的形式,通过输人变量取值的布尔比较(逻辑比较)预测输出变量的取值。

对于分类树,叶节点的预测值是它所含样本的输出变量值的众数类别预测置信度是叶节点中众数类别的百分比;

对于回归树,叶节点的预测值是它所含样本的输出变量值的平均值

1.1 决策树的几何意义

对于分类树,可将样本集中的每一个观测看成n 维( n 个输入变量)特征空间上的一个点,输出变量取不同类别的点以不同形状表示(如圆圈或三角形)

从几何意义上理解,是决策树的每个分枝在一定规则下完成对n 维特征空间的区域划分。决策树建立好后, n 维特征空间被划分成若干个小的矩形区域

决策树在确定每一步的特征空间划分标准时,都同时兼顾由此形成的两个区域,希望划分形成的两个区域所包含的观测点尽可能同时“纯正”,异质性低, 一个区域中多数观测点有相同的形状,尽量少地掺杂其他形状的点。换言之,同一区域中样本输出变量尽可能取同一类别值。

1.2 决策树的核心问题

  • 第一, 决策树的生长,也就是使用训练数据完成决策树的建立
  • 第二,决策树的剪枝,即利用测试样本集对所形成的决策树的精简

1.2.1 决策树的生长

决策树的生长过程是对训练样本集的不断分组过程

决策树上的各命分枚是在数据不断分组过程中逐渐生长出来的。当对某组数据的继续分组不再有意义时它所对应的分枝’便不再生长;当所有数据组的继续分组均不再有意义时决策树的生长过程宜告结束。此时, 一棵完整的决策树便形成了。

因此决策树生长的核心算法是确定决策树的分枝准则。

分校准则的确定涉.及两面问题

  • 第一:如何从众多的输入变量中选择1个当前最佳的分组变量
  • 第二:如何从分组变量的众多取值中找到一个最佳分割点

1.2.2 决策树的修剪

充分生长的大树并不是一棵预测新数据对象的最佳树。主要原因是,完整的决策树对训练样本特征的描述可能“过于精确”

随着决策树的生长和样本量的减少,越深层处的节点所体和的数据特征就越显个性化,一般性就越差

常用的修剪技术有预修剪( Pre-pruning )和后修剪(Post~pruning )两种。

预修剪技术主要用来限制决策树的充分生长,后修剪技术则是待决策树生长到一定程度后再进行剪技

  • 预剪枝:事先指定决策树生长的最大深度,事先指定样本量的最小值
  • 后剪枝:事先指定1个允许的最大预测误差值。剪枝过程将不断计算当前决策树对输出变量的预测误差。当误差高于允许的最大值时,则应立即停止剪枝,否则可以继续剪枝。

2 分类回归树的生长过程

最佳分组变量和最佳分割点应该是让输出变量异质性下降最快的变量和分割点

2.1 分类树的生长过程

  1. 输出变量异质性及异质性变化的测度
  • Gini系数
  • 信息熵与信息增益
  1. 分类树对于输入变量的处理策略
  • 数值型输入变量

分类回归树的2叉树特征决定了应确定一个合理的组限值,将数值型输人变量分成两组。确定过程为:首先,将数据按升序排列;然后,从小到大依次以相邻数值的中间。就是使两组输出变量值的异质性随着分组而快速下降,“纯度"快速增加。

  • 分类型数值变量

对于多分类型输入变量应确定哪些类别应合并在一起,以最终形成两个超类

理想的“超类”应使两组输出变量异质性总和达到最小,纯度”达到最大,即G() 达到最大。除此之外,还可采用Twoing 策略和Ordered 策略

2.2 回归树的生长过程

回归树确定当前最佳分组变量的策略与分类树类似,也需对数据型输入变量分组,以及对分类型数据变量生成“超类”。不同点在于:测度输出变量取值’异质’性的指标不是Gini 系数而是方差

2.3 损失矩阵

分类预测模型给出的分类预测结果可能是错误的, 不同错误类型造成的实际损失可能是不同的

3 分类回归树的剪枝

预剪枝:

  • 如果决策树的层数已经达到指定深度,则停止生长

  • 树中父节点和子节点所包含的最少样本量或比例

  • 树节点中输出变量的最小异质性减少量

分类回归树采用的后修剪技术称为最小代价复杂度剪枝法

3.1 最小代价复杂度的测度

决策树T 的代价复杂度R( T) 定义为:

R( T) 表示T在样本集上的预测误差。分类树中为错判率,回归树上为均方误差; T表示节点数目; α 为复杂度参数,表示每增加一个叶节点所带来的复杂度单位

3.2 交叉验证剪枝

当数据样本较小的时候可以使用N折交叉验证

之后不断改进CP值

4 R实现决策树模型

若希望自行设置预修剪参数,需首先调用rpart.control函数,基本书写格式为

############分类回归树: rpart包
BuyOrNot<-read.table(file="消费决策数据.txt",header=TRUE)
BuyOrNot$Income<-as.factor(BuyOrNot$Income)
BuyOrNot$Gender<-as.factor(BuyOrNot$Gender)Ctl<-rpart.control(minsplit=2,maxcompete=4,xval=10,maxdepth=10,cp=0)
set.seed(12345)
TreeFit1<-rpart(Purchase~.,data=BuyOrNot,method="class",parms=list(split="gini"),control=Ctl)
rpart.plot(TreeFit1,type=4,branch=0,extra=2)
printcp(TreeFit1)
plotcp(TreeFit1)set.seed(12345)
(TreeFit2<-rpart(Purchase~.,data=BuyOrNot,method="class",parms=list(split="gini")))
rpart.plot(TreeFit2,type=4,branch=0,extra=2)
printcp(TreeFit2)TreeFit3<-prune(TreeFit1,cp=0.008)
rpart.plot(TreeFit3,type=4,branch=0,extra=2)
printcp(TreeFit3)
plotcp(TreeFit3)

首先自行设置预剪枝参数以及复杂度参数CP 参数值。异质性指标采用Gini 系数。由于参数设置过于宽松,建立的决策树极为茂盛,如图所示。显然这棵树并不利预测。

利用printcp 了解CP 参数对模型误差的影响。本例中,年龄,性别和收入出现在分类回归树中,所以这三个输入变量对输出变量的预测有意义。从这个角度看,决策树可用于判断哪些输入变量对输出变量的预测有重要意义,哪些没有意义。

结果显示,根节点包含全部43 1 个观测样本,其中162 个输出变量值为l 的观测被误判为0 ,错判率为0.38

CP 列表口第1 列为序号。第2 列( CP )为CP 值。第3 列( nsplit)为样本数据共经过的分组次数口第4 列(时error)是预测误差相对值的估计。第5 列( xerror )是交叉验证的预测误差相对值。第6 列( xstd )为预测误差的标准误。这里只考虑1 个误差标准误。需注意: 这里的第4 列、第5 列给出的是以根节点预测误差为单位1 的相对值。例如:本例中根节点的预测错误率162/431 为单位1 , 经2 次分组得到3 个叶节点的分类树,因错误相对值为0.944 ,所以该树总的预测错误率为153/431

CP 列表中,第8 行:复杂度参数CP 取指定值O ( 最小值),此时的分类树是经过51 次分组( nsplit )的结果,包含52 个叶节点,如图所示。以根节点的预测误差估计值为单位1 ,该分类树的预测误差估计值为0.667 ;第7 行:经过交叉验证,在CP 参数增加至0.002 过程中进行了若干次剪枝,此时决策树是36 次分组后的结果,包含37 个节点,预测误差相对值为0.698 ,增加了0.031 个单位口其他同理。复杂度参数CP 值以及预测误差的可视化图形如图所示。

5 分类回归树的组合预测模型

组合预测模型是提高模型预测精度和稳健性的有效途径。组合预测模型的首要工作是基于样本数据建立一组模型而非单一模型。其次,预测时由这组模型同时提供各自的预测结果,通过类似“投票表决”的形式决定最终的预测结果。

组合预测中的单个模型称为基础学习器( Base Learner),它们通常有相同的模型形式,如决策树或其他预测模型等口多个预测模型是建立在多个样本集合上的。如何获得多个样本集合,如何将多个模型组合起来实现更合理的“投票表决”,是组合模型预测中的两个重要方面

对此,常见的技术有袋装( Bagging )技术和推进( Boosting )技术。

5.1 袋装方法

5.1.1 重抽样自举法

既然1棵决策树给出的预测值方差较大,那么将多棵不相关的决策树给出的预测值进行平均,平均预测值的方差将显著下降,预测结果的稳健性会大大提高。希望在多组独立的数据集上建立多棵决策树。因实际中只能获得1组数据集所以如何通过某种“模拟”方式获得多组独立数据集成为问题的关键。重抽样自举法就是这样一种应用广泛的“模拟”方式。

如果训练样本集的数据波动对模型参数的影响较小,则袋装技术的改进效果是有限的;反之,如果训练样本集小的数据波动对模型参数有较大影响,袋装技术的改进效果明显。

5.2 推进技术

袋装技术中,自举样本的生成完全是随机的口多个模型在预测技票中的地位也都相同,并未考虑不同模型预测精度的差异性。推进技术在这两方面进行了调整,其中的AdaBoost ( A-daotive Boosting)策略已有较为广泛的应用。

6 随机森林的原理

随机森林是以随即方法建立一片森林,森林中包含众多有较高预测精度且弱相关甚至不相关的决策树,并形成组合预测模型

随机森林的“内嵌”模型,即基础学习器是分类回归树, 其特色在于随机,主要表现在

  • 训练样本是对原始样本的重抽样自举,训练样本具有随机性
  • 在每棵决策树的建立过程中,成为当前最佳分组变量的输入变量, 是输入变量全体的1个随机候选变量子集中的“竞争获胜者.分组变量具有随机性。

1. 构建随机森林的变量随机性

  1. 随机选择输入变量

通过随机方式选择k 个输入变量进入候选变量子集

2. 随机组合输入变量

可通过随机选择L 个输入变量元并生成,L 个均服从均匀分布的随机数α ,做线性组合

如此重复得到k 个由新变量u 组成的输入变量子集

3. 随机森林对输入变量重要性的测度

若某输入变量对输出变量预测有重要作用,对袋外观测OOB 的该输入变量的取值上添加随机噪声,将显著影响输出变量的预测效果

7 随机森林R语言实现

library("randomForest")
MailShot<-read.table(file="邮件营销数据.txt",header=TRUE)
MailShot<-MailShot[,-1]
set.seed(12345)
(rFM<-randomForest(MAILSHOT~.,data=MailShot,importance=TRUE,proximity=TRUE))
head(rFM$votes)
head(rFM$oob.times)
DrawL<-par()
par(mfrow=c(2,1),mar=c(5,5,3,1))
plot(rFM,main="随机森林的OOB错判率和决策树棵树")
plot(margin(rFM),type="h",main="边界点探测",xlab="观测序列",ylab="比率差")
par(DrawL)
Fit<-predict(rFM,MailShot)
ConfM5<-table(MailShot$MAILSHOT,Fit)
(E5<-(sum(ConfM5)-sum(diag(ConfM5)))/sum(ConfM5))head(treesize(rFM))
head(getTree(rfobj=rFM,k=1,labelVar=TRUE))
barplot(rFM$importance[,3],main="输入变量重要性测度(预测精度变化)指标柱形图")

随机森林共建立了500 决策树,每个节点的候选输入变量个数为2。主于袋外观测OOB 的预测错判率为42. 67% 。从袋外观测的混淆矩阵发现对两个类别的预测精度均不理想。对NO 类的预测错误率达例,对YES 类的古’达例。

以第1 个观测为例: 有0.63的决策树投票给NO 类,0.37投票给YES 类。它有189 次作为OOB 未进人训练样本集

采用plot 函数画图直观观察OOB·错判率随随机森林中决策树数量的变化特点如图所示。plot 的绘图数据为err. rate。图中黑色线为整体错判率,红色线为对NO 类预测的错判率,绿色线为对YES 类预测的错判率口可见,模型对NO 类的预测效果好于对整体和YES 类的。当决策树数量达到380 后各类错判率基本保持稳定。所以,本例中参数nlree 可设置为380 。

可利用由margin函数考察处于分类边界附近的点和错判情况。这里,边界附近点的定义依据为: ‘随机森林中投票给正确类别(该观测所属的实际类别)的树的比率-投票给众数类(除正确类别以外的其他众数类别)的树的比率。容易理解,这两个比率之差为正表示预测正确,为负表示预测错误,为负的比例为错判率。差的绝对值越小,越接近0,表明该观测处在分类边界上,不易判定类别口margin 函数的基本书写格式为:

  1. 利用treesize 函数显示随机森林中各决策树的大小
  2. 为评价输入变量的重要性可直接利用importance 成分绘制柱形图,可调用randomForest 包中的importance 函数

投票给众数类(除正确类别以外的其他众数类别)的树的比率。容易理解,这两个比率之差为正表示预测正确,为负表示预测错误,为负的比例为错判率。差的绝对值越小,越接近0,表明该观测处在分类边界上,不易判定类别口margin 函数的基本书写格式为:

  1. 利用treesize 函数显示随机森林中各决策树的大小
  2. 为评价输入变量的重要性可直接利用importance 成分绘制柱形图,可调用randomForest 包中的importance 函数

5 决策树与随机森林相关推荐

  1. 使用泰坦尼克号数据进行决策树、随机森林

    使用泰坦尼克号数据进行决策树.随机森林 决策树分类器 随机森林 决策树分类器 sklearn.tree.DecisionTreeClassifier(criterion='gini',max_dept ...

  2. 独家 | 决策树VS随机森林——应该使用哪种算法?(附代码链接)

    作者:Abhishek Sharma 翻译:陈超 校对:丁楠雅 本文长度为4600字,建议阅读20分钟 本文以银行贷款数据为案例,对是否批准顾客贷款申请的决策过程进行了算法构建,并对比了决策树与随机森 ...

  3. ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)

    ML之回归预测:利用十类机器学习算法(线性回归.kNN.SVM.决策树.随机森林.极端随机树.SGD.提升树.LightGBM.XGBoost)对波士顿数据集[13+1,506]回归预测(模型评估.推 ...

  4. 【机器学习基础】(五):通俗易懂决策树与随机森林及代码实践

    与SVM一样,决策树是通用的机器学习算法.随机森林,顾名思义,将决策树分类器集成到一起就形成了更强大的机器学习算法.它们都是很基础但很强大的机器学习工具,虽然我们现在有更先进的算法工具来训练模型,但决 ...

  5. 决策树和随机森林(上)

    决策树和随机森林 信息熵 熵 联合熵 条件熵 互信息 决策树学习算法 信息增益 ID3.C4.5.CART Bagging与随机森林 概念部分 思考:两点分布的信息熵 import numpy as ...

  6. 2.1.决策树和随机森林

    2.1.决策树和随机森林 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用 ...

  7. 机器学习中的不平衡分类方法(part5)--决策树与随机森林

    学习笔记吗,仅供参考,有错必纠 文章目录 决策树与随机森林 基本流程 决策树定义及结构 决策树学习步骤 划分选择 信息增益 增益率 基尼基数 剪枝处理 随机森林 决策树与随机森林 决策树(decisi ...

  8. python实现决策树算法sklearn_python sklearn-05:决策树及随机森林

    1.决策树 2.随机森林 1.决策树(decision tree) 决策树一种简单的非线性模型,用来解决回归与分类问题. 通常是重复的将训练集解释变量分割成子集的过程.决策树的节点用方块表示,用来测试 ...

  9. 如何解读决策树和随机森林的内部工作机制?

    随机森林在过去几年里得到了蓬勃的发展.它是一种非线性的基于树的模型,往往可以得到准确的结果.但是,随机森林的工作过程大都处于黑箱状态,往往难以解读和完全理解.近日,Pivotal Engineerin ...

  10. 第二课 决策树与随机森林

    本系列是七月算法机器学习课程笔记 文章目录 1 从LR到决策树 1.1 决策树 1.2 决策树的终止条件 1.3 决策树划分依据 1.3.1 信息熵 1.3.2 信息增益 1.3.3 ID3模型 1. ...

最新文章

  1. 如何向外行解释产品经理频繁更改需求为什么会令程序员烦恼?
  2. Django出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 134: invalid
  3. SAP CRM产品主数据明细页面无法打开的调试步骤
  4. 迎.NET6,今日先送200P全新视频教程 / 源码
  5. 高性能并发TCP网络服务-IOCP框架修正VC2008版本
  6. win7电脑假死机怎么办
  7. java调用jndi出错,Webshpere数据源错误:无法查找JNDI名称
  8. 深度学习:Seq2seq模型
  9. iOS 实现快速切换主题详细教程(附上源码)
  10. simscape动力学仿真注意事项
  11. Σd|nφ(d)=n的证明
  12. 常用的几种 GPRS 模块
  13. 01 JDK8安装教程
  14. js引用类型之RegExp类型-new RegExp()
  15. 中国卫生和无菌阀市场趋势报告、技术动态创新及市场预测
  16. html ol中reverset,List T .Reverse()方法以及C#中的示例
  17. 小数分频器vhdl实现_VHDL实现分频器 - zy010101的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. 顶刊TPAMI 2022!清华刘玉身团队提出SPD:雪花反卷积网络
  19. flash教程,as3教程,as3新手入门等资源导航贴
  20. 笔记本上安装ubuntu系统

热门文章

  1. 西部数码 php版本,西部数码云主机如何安装PHP版本
  2. 0924-安徽省选 2002-哈利●波特与魔法石
  3. 【Hack The Box】windows练习-- SecNotes
  4. ICPC 2021上海 H Life is a Game
  5. STM32—时钟树(结合系统时钟函数理解)
  6. 我爱学习网络 2022-12-25
  7. 自带骚气的Python操作:把视频转换成字符动画
  8. 语音识别技术如何推动智能家居发展?
  9. 8进制数转换为10进制数
  10. 关于Keil出现Browse Information of one or more files is not avaliable