新决策树例子Word下载.docx
- 文档编号:22690313
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:23
- 大小:356.12KB
新决策树例子Word下载.docx
《新决策树例子Word下载.docx》由会员分享,可在线阅读,更多相关《新决策树例子Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
#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(iris.rp1,uniform=T,branch=0,margin=0.1,main="
Classification
Tree\nlrisSpeciesbyPetalandSepalLength"
#plot的对象是由rpart得到的决策树对象,可以把这课决策树画出来,其中
(1)uniform可取T,F两个值,T表示图形在空间上均匀分配
(2)branch刻画分支的形状,取值在0和1之间,branch=0是倒v型,branch=1是直角型,而当branch属于(0,1)时是梯形
ClassificationTree
IrisSpeciesbyPetalandSepalLengthbranch=0
ClassificationTree
IrisSpeciesbyPetalandSepalLength
branch=1
ClassificationTree
IrisSpeciesbyPetalandSepalLength
branch=0.5
(3)margin刻画图的大小,margin越大,决策树越小,上述三幅图的
margin=0.1,而当margin=1时,决策树变小了
ClassificationTree
(4)main是图的标题,其中“\n”是换行的意思
text(iris.rp1,use.n=T,fancy=T,col="
blue"
ClassificationTree
(1)use.n=T,在每个节点处都会显示落在该节点的观测个数和对应的分类,use.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="
split.col="
red"
main="
决策
树"
决策树
rpart.plot(iris.rp1,branch=O,branch.type=O,type=1,extra=1,shadow.col=
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时每个根节点左右分支对应的属性的取值范围都标出来了(之前那些都只标了左分支的属性取值),并且只
对叶子节点画圆圈。
type=4时,跟type=3近似,但对叶子节点和根节点都画圆圈。
type=O
virginic
0145
'
versicol
、.O495
Petal.Wi<
1.8
yesI
Petal.Le<
2.4
type=2
505050
type=3
type=4
(3)extra是表示在节点处显示的额外信息的种类。
当extra=0(缺省值)时,
无额外信息。
当extra=1,在节点处会显示落在该节点的观测个数和对应的分类(如上图)。
当extra=2,在节点处会显示(在该点分类正确的个数/落在该节点的观测个数)。
extra=2
(4)shadow.col="
green"
分别是决策树中节点框的阴影颜色、填充颜色、边框颜色、和分类属
性的颜色
用信息增益度量纯度
iris.rp2=rpart(Species~.,data=iris,method="
parms=list(split="
i
nformation"
plot(iris.rp2,uniform=T,branch=0,margin=0.1,main="
text(iris.rp2,use.n=T,fancy=T,col="
由上面两幅图可以看出,对于iris数据集,无论是用信息增益(information)还是gini来选择分裂属性,得到的决策树都是一样的。
决策树检验
因为iris数据集比较简单,不需修树,我们可以把原来的150个样本随机分成
学习集和测试集,用学习集来生成决策树,然后用测试集验证决策树的准确性。
ind<
-sample(2,nrow(iris),replace=TRUE,prob=c(0.7,0.3))iris.train=iris[ind==1,]#生成训练集
iris.test=iris[ind==2,]#生成测试集
iris.rp2=rpart(Species~.,iris.train,method=“class”)
iris.rp3=predict(iris.rp2,iris.test[,-5],type="
table(iris.test[,5],iris.rp3)
table(iris
・test[x5],iris・rp3}iris■rp3
setosaversicolor
virginica
13
versicolor
18
1
virginioa
10
准确率=1-2/43=95.35%,与原来的96%准确性几乎一样,所以这颗决策树有加好的泛化能力。
我们再考虑另一个复杂一点的例子
pima=read.table("
D:
/Grace/pima.indians.diabetes3.txt"
header=T)
heaii{pliLa)
flucoss九彗mliG即応ict;
帶弓bu貨口卩爺前弓cl恥対iji匚叩.电宛
■
€
:
鶴
35
瞌E
0,527
5:
diateuc
z
So
29
2E.£
0.351
31
noical
83
昕
23
28.1
0*167
21
Q
noiral
13?
40
灶1
2,239
77
diabetic
S
75
50
32
31,0
2£
ir
*5
3C.5
D+159
=-
ww
diabetic
数据说明:
通过7个变量(分别是怀孕次数npregnant,身体质量指数bmi,葡萄糖水平glucose,心脏血样diastolic.bp,皮下脂肪厚度skinfoldthickness,遗传影响pedigree,年龄age)来判断一个人是否患有糖尿病。
set.seed(123)
pima.rp<
-rpart(pima[,9]~.,data=pima[,1:
7],cp=0.004,
parms=list(split="
gini"
数据的第八列和第九列其实是一样的,有糖尿病(diabetic)的记为1,正常的记为0,把第九列的分类属性作为因变量,Pima数据集的前七列作为自变量,
用gini来衡量纯度,
pima-ipn=532
node)tsplrifloss,yval,(yprob)*denotesterminalnode
1}root532177narmal(0.33270A770.6A729323)
71diabetic(0.624338620.37S6613B>
diabetic(0.0-5210£
2€0.15769474}*
5空uocnal(0.477B76110・522123S9}diabetic(0.59^93671D.^0506329}
2diabetic(0.900000000.IOOOQOOC}*
29normal(0,49152542O・50647458>
2}glucos已》=丄空~.5LB9
4)glucoae^lS^.576
5}glucase<
157»
5113
10)bml>
=30t27332
20)age>
=^2.520
21)*ge<
42.559
42)
13diaheuictO-5909090S0.43^09091)
2diabetic(0.64615335O.153£
4£
15)*
ISnormal(O.^S38?
O9?
0..51fil2903)
3diabetic(0.^00000000,30000000)*
Snormal(Q.36O9523S□・6190^762^
3diatecic(Q.62SOOQQQ0.37500000)*
3normal(0.230769230・'
7692307-?
}*
3norttal(0.200000000.30000000)*
(0.205562350.79411765}*
pedigree>
*0.2e544
S4)135.513
3S)y丄口aose>
=135.53.1
170)1.5510
171)bmi<
弓1・5521
3貂)i)ini<
3弓托5B343Jbmi>
-34.6513
43)pedigreed0.2S515
11)binr<
3G.2347ncrnial
3)glucose<
127.53^3591narir^l(0.172011660.£
2755034)
6}age>
=20¥
512943normal(0.333333330,66666667}
7)agre<
26,521416normal(0,074766360.S25233€4)*
结果解释:
以根节点为例,观测总数是532,其中177例糖尿病,355例正常,该节点的分类属性是正常,所以错判例数(loss)是177,(错判率,正确判断率)=(0.332706770.66729323)。
如果根节点的观测满足glucose>
=127.5(即128),则观测值落入左边的分支,否则落入右边的分支。
rpart.plot(pima.rp,branch=0,branch.type=0,type=1,extra=1,shadow.col="
gray"
main="
决策树
diabeticnormal
53310
图的解释:
1.每个节点框中的数字是:
(落在该节点有糖尿病的个数/正常的个数)
2.每个节点框内的diabetic、normal表示该节点对应的分类属性
printcp(pima.rp)#列出cp值
printcp[pima.rp)cias^iticationtre^j
rp^rt{fo工=pimaEj91-,Fdata=pima[f1:
71,partas=list(split=*gini*),cp=0*004)
Variablesactuallyusedintreecanstmction;
[1]agebmiglucosenprccpiantpedigree
Etootnodeerror!
177/532-0.33271
n=532
CPnsplitreLetror
terror
xstd
Q.2^5537
*IDOO'
J
l.DOOQO
0.05«
4»
7
0.73446
0.790%
0.0573C2
0.025424
0.62147
0.72316
0.055701
0.020716
0,57062
0.74011
0.Q5EH1
0.014124
0,75141
0.05E427
石
0.011299
n
0,45763
0.7457C
0.056284
0.004000
14
0.42373
(J-D5&
427
cp:
complexityparameter复杂性参数,用来修剪树的
当决策树复杂度超过一定程度后,随着复杂度的提高,测试集的分类精确度反而会降低。
因此,建立的决策树不宜太复杂,需进行剪枝。
该剪枝算法依赖于复杂性参数cp,cp随树复杂度的增加而减小,当增加一个节点引起的分类精确度变化量小于树复杂度变化的cp倍时,则须剪去该节点。
故建立一棵既能精确分类,又不过度适合的决策树的关键是求解一个合适的cp值。
一般选择错判率最小值
对应的cp值来修树
plotcp(pima.rp)
•?
EgvnlRgx
12
sizeoftree
4610
1215
Inf0.120.038
0.023
0.017
0.013
0.0067
cp
pima.prune=prune(pima.rp,cp=pima.rp$cptable[which.min(pima.rp$cptable[,"
xerro门),"
CP"
])
修剪决策树
「yesglucose>
=128
normal
177355
glucose>
=158
11871
normal
28侈
diabetic、6412
bmi>
=30
normal5459
4732
■U7
xerror:
交叉验证(crossvalidation)错判率的估计
xstd:
交叉验证错判率的标准差
建立树模型要权衡两方面问题,一个是要拟合得使分组后的变异较小,另一个是要防止过度拟合,而使模型的误差过大,前者的参数是CR后者的参数是Xerror<
所以要在Xerror最小的情况下,也使CP尽量小。
Party包的ctree函数
party包的处理方式:
它的背景理论是条件推断决策树”(conditionalinferencetrees):
它根
据统计检验来确定自变量和分割点的选择。
即先假设所有自变量与因变量均独立。
再对它们
进行卡方独立检验,检验P值小于阀值的自变量加入模型,相关性最强的自变量作为第一次
分割的自变量。
自变量选择好后,用置换检验来选择分割点。
用party包建立的决策树不需
要剪枝,因为阀值就决定了模型的复杂程度。
所以如何决定阀值参数是非常重要的(参见
ctree_control)。
较为流行的做法是取不同的参数值进行交叉检验,选择误差最小的模型参数。
Ctree在Iris数据上的应用
##先载入包party
##构造分类树
iris_ctree<
-ctree(Species~.,data=iris)
##画出分类树的图
plot(iris_ctree)
plot(iris_ctree,type="
simple"
———
n=4fl
v=|O0J2Z
##比较用分类树预测的结果和实际结果之间的区别
table(predict(iris_ctree),iris$Species)
serosaversicolorvnrgnnicasetosa5000
versi匸0495virgini匚a0145
##由结果可以看出,由该决策树得到的结果的错误率为6/150=4%
Ctree在diabetes数据上的应用
##载入diabetes的数据
课件讨论班研一秋季学期我的讲稿
Wpima.indians.diabetes3.txt"
header=T)##观察diabetes的数据
head(data2)
npregnant
glucose
di^stol1c.bpskinfold.
thickness
bni
pedigr配
14S
72
33,6
0.627
SS
66
2b.6
0.35L
39
師
□.167
137
4J.l
Z.Z8&
78
31.0
0.Z4S
1S7
70
45
30.5
0.L5S
ageclassdigi5C
class
1d~iabttGt
2riormfl'
l
L-1363
323Z5
3Hormal
4diabet-ic
5diabetic
6diabetic
pima_ctree=ctree(class~npregnant+glucose+diastolic.bp+skinfold.thickness+bmi+pedigree+age,data=data2)##画出分类树的图plot(pima_ctree)
r^de5fn=7e;
a
0=0叶./
£
畫一ETS
IBlum口匚
ilOt
NjCriB7(11=751.
兰;
*
D«
-30
f
■苣Q匸
hkule13in-5@i,F抽泊[山血
■fG
s04-
IHf吕
plot(pima_ctree,type="
##计算错判率
diabeticnormaldiabetic10941
normal68314
109/532=20.5%
##由结果可以看出,由该决策树得到的结果的错误率为##能否修改参数改变模型?
ctree_control(teststat=c("
quad"
"
max"
),testtype=c("
Bonferroni"
MonteCarlo"
mincriterion=
Univariate"
Teststatistic"
),=0.95,minsplit=20,minbucket=7,
maxsurrogatemtry
savesplitstatsmaxdepth
stump=FALSE,nresample=9999,maxsurrogate=0,mtry=0,savesplitstats=TRUE,maxdepth=0)
teststat
acharacterspecifyingthetypeoftheteststatistictobeapplied.
testtypemincriterion
acharacterspecifyinghowtocomputethedistributionoftheteststatistic.
thevalueoftheteststatistic(fortesttype=="
),or1
-p-value(forothervaluesoftesttype)thatmustbeexceededinorderto
implementasplit.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 决策树 例子