决策树:分类树与回归树

这篇博客介绍了决策树在分类任务中的应用,以美国航天飞机自动着陆问题为例,展示了如何使用R语言的rpart库构建分类树,并通过交叉验证评估模型性能。同时,还探讨了回归树在预测波士顿郊区房价中的作用,对比了决策树与最小二乘回归的交叉验证结果。
摘要由CSDN通过智能技术生成
#决策树:分类树和回归树#
#***分类树
#例1 shuttle数据集分类:关于美国航天飞机在各种条件下是否自动着陆的决策问题
#有256行及7列。头六列为作为自变量的定性变量,而最后一列为因变量。
#自变量包括稳定性(stability,取值stab/xstab)、误差大小(error,取值(MM / SS / LX / XL)
#信号(sign,取值pp / nn)、风向(wind,取值head / tail)、
#风力(magn,取值(Light / Medium /  Strong / Out)、能见度(vis,取值yes / no),
#因变量为是否用自动着陆系统(use,取 值auto/noauto)。
install.packages("MASS")
install.packages("rpart.plot")
library(MASS)
shuttle[1:10,]
library(rpart.plot)
(a=rpart(use~.,shuttle))#拟合决策树并打印 rpart():决策树 use:因变量 shuttle:数据集
rpart.plot(a,type=4,extra=1)#画图
z=predict(a,shuttle,type="class")#预测本⾝(训练集—>训练集)
(b=table(shuttle$use,z))#做出右边的分类表 即预测结果与实际结果
1-sum(diag(b))/nrow(shuttle)#计算误差率
printcp(a)
#cp:参数复杂度 
#cp是参数复杂度(complexity parameter)
#作为控制树规模的惩罚因子,简而言之,就是cp越大,树分裂规模(nsplit)越小。
#输出参数(rel error)指示了当前分类模型树与空树之间的平均偏差比值。
#xerror为交叉验证误差,xstd为交叉验证误差的标准差。
#可以看到,当nsplit为3的时候,即有四个叶子结点的树,要比nsplit为1,即2个叶子结点的树的交叉误差要小。
#而决策树剪枝的目的就是为了得到更小交叉误差(xerror)的树。
###简单交叉验证:训练集和测试集各一半
summary(shuttle)
n=nrow(shuttle)
set.seed(1000)
test=sample(1:n,n/2)
summary(shuttle[test,])#大约auto/noauto一样⼀半
t=rpart(use~.,shuttle[-test,])  
t1=predict(t,shuttle[test,],type="class")  
(b1=table(shuttle$use[test],t1))
1-sum(diag(b1))/length(test)
#***回归树
#例2 housing数据集
#这是波士顿郊区的房价数据的一部分
#原数据有506个街区(观测)及14个变量
#我们试图用其他变量来预测平均房价medv
#下面是决策树和通常最小二乘回归的CV结果比较.
setwd("/Users/CR/Desktop/data")
w=read.table("housing.txt",header=T)
w$CHAS=factor(w$CHAS)
names(w)
str(w)
n=nrow(w)
set.seed(1000)
m=sample(1:n,n/2)
a2=rpart(MEDV~.,w[-m,]) #决策树训练集建模
M=mean((w$MEDV[m]-mean(w$MEDV[m]))^2)  
NMSE=mean((w$MEDV[m]-predict(a2,w[m,]))^2)/M  
NMSE
a3=lm(MEDV~.,w[-m,]) #最⼩二乘回归训练集建模
NMSE3=mean((w$MEDV[m]-predict(a3,w[m,]))^2)/M  
NMSE3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值