5 决策树与随机森林

决策树与随机森林

1 决策树原理

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mw8QRgL0-1666081953458)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018104129108.png)]

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

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

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

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

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

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

1.1 决策树的几何意义

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bd3y5cJa-1666081953459)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018104707649.png)]

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

1.2 决策树的核心问题

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

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUNcbai5-1666081953459)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018105109577.png)]

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

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

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

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

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g9Fyw4Z9-1666081953460)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018105847763.png)]

2 分类回归树的生长过程

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

2.1 分类树的生长过程

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

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

  • 分类型数值变量

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

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

2.2 回归树的生长过程

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

2.3 损失矩阵

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

在这里插入图片描述

3 分类回归树的剪枝

预剪枝:

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

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

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

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

3.1 最小代价复杂度的测度

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJyPXL8N-1666081953461)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018113906105.png)]

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

3.2 交叉验证剪枝

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

之后不断改进CP值

4 R实现决策树模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aYouOLeB-1666081953461)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018114349420.png)]

若希望自行设置预修剪参数,需首先调用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)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DwNPN5tM-1666081953463)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018115205849.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hAqIzR2R-1666081953463)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018115217614.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5qbXS8EB-1666081953463)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018115229622.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-id8rRkLv-1666081953464)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018115307176.png)]

首先自行设置预剪枝参数以及复杂度参数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组数据集所以如何通过某种“模拟”方式获得多组独立数据集成为问题的关键。重抽样自举法就是这样一种应用广泛的“模拟”方式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mUFjl9oE-1666081953464)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018115936074.png)]

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

5.2 推进技术

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

6 随机森林的原理

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

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

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

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

  1. 随机选择输入变量

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gagET4rV-1666081953465)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018151100619.png)]

2. 随机组合输入变量

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dmpxtTSt-1666081953465)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018151201441.png)]

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YaU9RbUY-1666081953466)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018151349466.png)]

7 随机森林R语言实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GRY8bHVd-1666081953466)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018151443307.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7oHroyZT-1666081953466)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018151451871.png)]

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 类的古’达例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yh2c463v-1666081953467)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018151748359.png)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i57fkarf-1666081953467)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018152011870.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FyBMIhsD-1666081953468)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221018152132450.png)]

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

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

  1. 利用treesize 函数显示随机森林中各决策树的大小
  2. 为评价输入变量的重要性可直接利用importance 成分绘制柱形图,可调用randomForest 包中的importance 函数
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值