《新决策树例子.pdf》由会员分享,可在线阅读,更多相关《新决策树例子.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、rpartrpart 包的包的 rpartrpart 函数函数IrisIris 数据集数据集library(rpart)#加载 rpart 包head(iris)#看看 iris 数据集里有哪些变量iris 以鸢尾花的特征作为数据来源,数据集包含 150 个数据,分为 3 类,每类50 个数据,每个数据包含 4 个属性分别是花萼长度、花萼宽带、花瓣长度、花瓣宽度用用 ginigini 度量纯度度量纯度iris.rp1=rpart(Species.,data=iris,method=class,parms=list(split=gini)#rpart(formula,data,method,pa
2、rms,.)得到决策树对象,其中(1)formula 是回归方程的形式,yx1+x2+,iris 一共有 5 个变量,因变量是 Species,自变量是其余四个变量,所以 formula 可以省略为Species.(2)data 是所要学习的数据集(3)method 根据因变量的数据类型有如下几种选择:anova(连续型),poisson(计数型),class(离散型),exp(生存型),因为我们的因变量是花的种类,属于离散型,所以 method 选择 class(4)parms 可以设置纯度的度量方法,有 gini(默认)和 information(信息增益)两种。plot(iris.rp1
3、,uniform=T,branch=0,margin=0.1,main=ClassificationTreenIris Species by Petal and Sepal Length)#plot 的对象是由 rpart 得到的决策树对象,可以把这课决策树画出来,其中(1)uniform 可取 T,F 两个值,T 表示图形在空间上均匀分配(2)branch 刻画分支的形状,取值在 0 和 1 之间,branch=0 是倒 v 型,branch=1 是直角型,而当 branch 属于(0,1)时是梯形Classification TClassification TreereeIris Spec
4、ies by Petal and Sepal LengthIris Species by Petal and Sepal Lengthbranch=0.5branch=0.5|(3)margin 刻画图的大小,margin 越大,决策树越小,上述三幅图的margin=0.1,而当 margin=1 时,决策树变小了(4)main 是图的标题,其中“n”是换行的意思text(iris.rp1,use.n=T,fancy=T,col=blue)text(iris.rp1,use.n=T,fancy=F,col=blue)(1)use.n=T,在每个节点处都会显示落在该节点的观测个数和对应的分类,u
5、se.n=F 时就不显示观测个数了。(2)fancy=T、F 的区别见上图(3)col=“blue”就是写在树上的信息的颜色。还有另一种画图函数library(rpart.plot)rpart.plot(iris.rp1,branch=0,branch.type=2,type=1,extra=1,shadow.col=gray,box.col=green,border.col=blue,split.col=red,main=决策树)rpart.plot(iris.rp1,branch=0,branch.type=0,type=1,extra=1,shadow.col=gray,box.col=
6、green,border.col=blue,split.col=red,main=决策树)(1)branch.type 是分支的形状参数,branch.type=0 时画出来的分支跟 plot里的一样,就是一条线,而当 branch.type=2 时,分支的宽度是数据的标准差,branch.type=1 时,是方差(2)type:type=0 只对叶子节点画圆圈。type=1 对根节点和叶子节点画圆圈,分裂属性的值会写在节点框的上面。type=2 时跟 type=1 近似,但分裂属性的值会写在节点框的下面。type=3 时每个根节点左右分支对应的属性的取值范围都标出来了(之前那些都只标了左分支
7、的属性取值),并且只对叶子节点画圆圈。type=4 时,跟type=3 近似,但对叶子节点和根节点都画圆圈。(3)extra 是表示在节点处显示的额外信息的种类。当 extra=0(缺省值)时,无额外信息。当extra=1,在节点处会显示落在该节点的观测个数和对应的分类(如上图)。当 extra=2,在节点处会显示(在该点分类正确的个数/落在该节点的观测个数)。(4)shadow.col=gray,box.col=green,border.col=blue,split.col=red分别是决策树中节点框的阴影颜色、填充颜色、边框颜色、和分类属性的颜色用信息增益度量纯度用信息增益度量纯度iris
8、.rp2=rpart(Species.,data=iris,method=class,parms=list(split=information)plot(iris.rp2,uniform=T,branch=0,margin=0.1,main=ClassificationTreenIris Species by Petal and Sepal Length)text(iris.rp2,use.n=T,fancy=T,col=blue)由上面两幅图可以看出,对于 iris 数据集,无论是用信息增益(information)还是 gini 来选择分裂属性,得到的决策树都是一样的。决策树检验决策树检验
9、因为 iris 数据集比较简单,不需修树,我们可以把原来的 150 个样本随机分成学习集和测试集,用学习集来生成决策树,然后用测试集验证决策树的准确性。ind-sample(2,nrow(iris),replace=TRUE,prob=c(0.7,0.3)iris.train=irisind=1,#生成训练集iris.test=irisind=2,#生成测试集iris.rp2=rpart(Species.,iris.train,method=“class”)iris.rp3=predict(iris.rp2,iris.test,-5,type=class)table(iris.test,5,i
10、ris.rp3)准确率=1-2/43=95.35%,与原来的96%准确性几乎一样,所以这颗决策树有加好的泛化能力。我们再考虑另一个复杂一点的例子。我们再考虑另一个复杂一点的例子。pima=read.table(D:/Grace/pima.indians.diabetes3.txt,header=T)数据说明:通过 7 个变量(分别是怀孕次数 npregnant,身体质量指数 bmi,葡萄糖水平glucose,心脏血样 diastolic.bp,皮下脂肪厚度 skinfold thickness,遗传影响 pedigree,年龄 age)来判断一个人是否患有糖尿病。set.seed(123)pi
11、ma.rp=127.5(即 128),则观测值落入左边的分支,否则落入右边的分支。rpart.plot(pima.rp,branch=0,branch.type=0,type=1,extra=1,shadow.col=gray,box.col=green,border.col=blue,split.col=red,main=决策树)CtreeCtree 在在 diabetesdiabetes 数据上的应用数据上的应用#载入 diabetes 的数据data2=read.table(F:课 件 讨 论 班 研 一 秋 季 学 期 我 的 讲 稿pima.indians.diabetes3.txt
12、,header=T)#观察 diabetes 的数据head(data2)#构造分类树pima_ctree=ctree(classnpregnant+glucose+diastolic.bp+skinfold.thickness+bmi+pedigree+age,data=data2)#画出分类树的图plot(pima_ctree)plot(pima_ctree,type=simple)#计算错判率#由结果可以看出,由该决策树得到的结果的错误率为109/532=20.5%#能否修改参数改变模型?ctree_control(teststat=c(quad,max),testtype=c(Bonf
13、erroni,MonteCarlo,Univariate,Teststatistic),mincriterion=0.95,minsplit=20,minbucket=7,stump=FALSE,nresample=9999,maxsurrogate=0,mtry=0,savesplitstats=TRUE,maxdepth=0)a character specifying the type of the test statistic to be applied.teststattesttypemincriteriona character specifying how to compute
14、the distribution of the test statistic.the value of the test statistic(fortesttype=Teststatistic),or 1-p-value(for other values oftesttype)that must be exceeded in order toimplement a split.minsplitminbucketstumpnresamplemaxsurrogatemtrythe minimum sum of weights in a node in order to be considered
15、forsplitting.the minimum sum of weights in a terminal node.a logical determining whether a stump(a tree with three nodes only)is tobe computed.number of Monte-Carlo replications to use when the distribution of the teststatistic is simulated.number of surrogate splits to evaluate.Note the currently o
16、nly surrogatesplits in ordered covariables are implemented.number of input variables randomly sampled as candidates at each nodefor random forest like algorithms.The defaultmtry=0 means that norandom selection takes place.savesplitstatsa logical determining if the process of standardized two-sample
17、statisticsfor split point estimate is saved for each primary split.maxdepthmaximum depth of the tree.The defaultmaxdepth=0 means that norestrictions are applied to tree sizes.#尝试修改 mincriterion=0.6(mincriterion=0.95的结果与原来一样,故 0.95 应该为默认值)pima_ctree=ctree(classnpregnant+glucose+diastolic.bp+skinfold.thickness+bmi+pedigree+age,data=data2,control=ctree_control(mincriterion=0.6)table(predict(pima_ctree),data2$class)#计算错判率#由结果可以看出,由该决策树得到的结果的错误率为97/532=18.2%plot(pima_ctree)#此时树变得更复杂了
限制150内