新决策树例子

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

rpart包的rpart函数

Iris数据集

library(rpart) #加载rpart包

head(iris) #看看iris数据集里有哪些变量

iris以鸢尾花的特征作为数据来源,数据集包含150个数据,分为3类,每类50个数据,每个数据包含4个属性分别是花萼长度、花萼宽带、花瓣长度、花瓣宽度

用gini度量纯度

=rpart(Species~.,data=iris,method="class",parms=list(split="gini")) # rpart(formula, data, method, parms, ...)得到决策树对象,其中

(1)formula是回归方程的形式,y~x1+x2+…,iris一共有5个变量,因变量是Species,自变量是其余四个变量,所以formula可以省略为Species~.

(2)data是所要学习的数据集

(3)method根据因变量的数据类型有如下几种选择:anova(连续型),poisson(计数型),class(离散型),exp(生存型),因为我们的因变量是花的种类,属于离散型,所以method选择class

(4)parms可以设置纯度的度量方法,有gini(默认)和information(信息增益)两种。

plot, uniform=T, branch=0, margin=,main="Classification Tree\nIris 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 T ree

Iris Species by Petal and Sepal Length

branch=0.5

|

(3)margin刻画图的大小,margin越大,决策树越小,上述三幅图的margin=,而当margin=1时,决策树变小了

(4)main是图的标题,其中“\n”是换行的意思

text, =T, fancy=T, col="blue")

text, =T, fancy=F, col="blue")

(1) =T,在每个节点处都会显示落在该节点的观测个数和对应的分类,=F 时就不显示观测个数了。

(2) fancy=T、F的区别见上图

(3) col=“blue”就是写在树上的信息的颜色。

还有另一种画图函数

library

,branch=0,=2,type=1,extra=1,="gray",="green",="blue",="red" ,main="决策树")

,branch=0,=0,type=1,extra=1,="gray",="green",="blue",="red", main="决策树")

(1)是分支的形状参数,=0时画出来的分支跟plot里的一样,就是一条线,而当=2时,分支的宽度是数据的标准差,=1时,是方差

(2) type:type=0只对叶子节点画圆圈。type=1对根节点和叶子节点画圆圈,分裂属性的值会写在节点框的上面。type=2时跟type=1近似,但分裂属性的值会写在节点框的下面。type=3时每个根节点左右分支对应的属性

的取值范围都标出来了(之前那些都只标了左分支的属性取值),并且只

对叶子节点画圆圈。type=4时,跟type=3近似,但对叶子节点和根节点都画圆圈。

(3) extra是表示在节点处显示的额外信息的种类。当extra=0(缺省值)时,无额外信息。当extra=1,在节点处会显示落在该节点的观测个数和对应的分类(如上图)。当extra=2,在节点处会显示(在该点分类正确的个

数/落在该节点的观测个数)。

(4) ="gray",="green",="blue",="red"分别是决策树中节点框的阴影颜色、填充颜色、边框颜色、和分类属性的颜色

用信息增益度量纯度

=rpart(Species~.,data=iris,method="class",parms=list(split="informati on"))

plot, uniform=T, branch=0, margin=,main="Classification Tree\nIris Species by Petal and Sepal Length")

text, =T, fancy=T, col="blue")

由上面两幅图可以看出,对于iris数据集,无论是用信息增益(information)还是gini来选择分裂属性,得到的决策树都是一样的。

决策树检验

因为iris数据集比较简单,不需修树,我们可以把原来的150个样本随机分成学习集和测试集,用学习集来生成决策树,然后用测试集验证决策树的准确性。ind <- sample(2, nrow(iris), replace=TRUE, prob=c, )

=iris[ind==1,] #生成训练集

=iris[ind==2,] #生成测试集

=rpart(Species~., , method=“class”)

=predict, [,-5], type="class")

table[,5],

准确率=1-2/43=%,与原来的96%准确性几乎一样,所以这颗决策树有加好的泛化能力。

我们再考虑另一个复杂一点的例子。

数据说明:

通过7个变量(分别是怀孕次数npregnant,身体质量指数bmi,葡萄糖水平glucose,心脏血样,皮下脂肪厚度skinfold thickness,遗传影响pedigree,年龄age)来判断一个人是否患有糖尿病。

(123)

<- rpart(pima[,9] ~., data = pima[,1:7], cp=, parms=list(split="gini")) 数据的第八列和第九列其实是一样的,有糖尿病(diabetic)的记为1,正常的记为0,把第九列的分类属性作为因变量, Pima数据集的前七列作为自变量,用gini来衡量纯度,

结果解释:

以根节点为例,观测总数是532,其中177例糖尿病,355例正常,该节点的分类属性是正常,所以错判例数(loss)是177,(错判率,正确判断率)=。如果根节点的观测满足glucose>=(即128),则观测值落入左边的分支,否则落入右边的分支。

,branch=0,=0,type=1,extra=1,="gray",="green",="blue",="red", main="决策树")

图的解释:

1.每个节点框中的数字是:(落在该节点有糖尿病的个数/正常的个数)

2.每个节点框内的diabetic、normal表示该节点对应的分类属性

printcp #列出cp值

cp: complexity parameter复杂性参数,用来修剪树的

当决策树复杂度超过一定程度后,随着复杂度的提高,测试集的分类精确度反而会降低。因此,建立的决策树不宜太复杂,需进行剪枝。该剪枝算法依赖于复杂性参数cp,cp随树复杂度的增加而减小,当增加一个节点引起的分类精确度变化量小于树复杂度变化的cp倍时,则须剪去该节点。故建立一棵既能精确分类,又不过度适合的决策树的关键是求解一个合适的cp值。一般选择错判率最小值对应的cp值来修树

plotcp

=prune,cp=$cptable[$cptable[,"xerror"]),"CP"])?

xerror:交叉验证(cross validation)错判率的估计

xstd:交叉验证错判率的标准差

建立树模型要权衡两方面问题,一个是要拟合得使分组后的变异较小,另一个是要防止过度拟合,而使模型的误差过大,前者的参数是CP,后者的参数是Xerror。所以要在Xerror最小的情况下,也使CP尽量小。

Party包的ctree函数

party包的处理方式:它的背景理论是“条件推断决策树”(conditional inference trees):它根据统计检验来确定自变量和分割点的选择。即先假设所有自变量与因变量均独立。再对它们进行卡方独立检验,检验P值小于阀值的自变量加入模型,相关性最强的自变量作为第

相关文档
最新文档