---------------------------------------------------------------------------------------------
决策树(decision tree) 决策树是使用类似于一棵树的结构来表示类的划分,树的构建可以看成是变量(属性)选择的过程,内部节点表示树选择那几个变量(属性)作为划分,每棵树的叶节点表示为一个类的标号,树的最顶层为根节点。
I
D3, C4.5和CART均采用贪心算法,自顶向下递归的分治方式构造,从训练数据集和他们相关联的类标号开始构造树。随着树的构造,训练数据集递归的划分成较小的子集。
算法当中三个重要的参数:D 训练数据集和类标号 ,Attitude_list
描述观测的变量(属性)列表,Attribute_selection_list变量(属性)选择度量,确定一个分裂准侧(splitting
criterion),这种分裂准则选择哪些变量(属性)为按类“最好的”进行划分,也确定分枝选择哪些观测的为“最好的划分”。即分裂准则可以确定分裂
变量(属性),也可以确定分裂点(splitting--point),使最后分裂的准则尽可能的“纯”,“纯”表示所有观测都属于同一类,常用的有信息
增益,增益率,Gini指标作为度量。
信息增益:I
D3使用信息增益,假定D中类标号变量(属性)具有m个值,定义m个不同的类C(i)(i=1,2---m),C(i,d)是D中C(i)类的元组的集合,|D|和|C(i,D)|分别是D,C(i,D)中的个数。
决策树在构造过程中,由于数据中含有噪声和离群点等异常数据,训练出来的树的分枝会过分拟合数据,处理过分拟合的办法是对树进行剪枝,剪枝后的树更
小,复杂度更低,而且容易理解,常用的剪枝办法有,先剪枝和后剪枝。
R语言中实现
决策树的包rpart;
1,生成树:rpart()函数
raprt(formular,data,weight,subset,na.action=na.rpart,method,model=FALSE,x=FALSE,y=TRUE,parms,control,cost,...)
fomula :模型格式形如
outcome~
predictor1+
predictor2+
predictor3+ect。
data :数据。
na.action:缺失数据的处理办法,默认为删除因变量缺失的观测而保留自变量缺失的观测。
method:树的末端数据类型选择相应的变量分割方法,连续性method=“anova”,离散型使用method=“class”,,计数型
method=“poisson”,生存分析型method=“exp”。
parms:设置三个参数,
先验概率,损失矩阵,分类矩阵的度量方法。
control:控制每个节点上的最小样本量,交叉验证的次数,复杂性参量:cp:complexity
pamemeter。 2,剪枝使用 prune(tree,cp,....)
tree常是rpart()的结果对象,cp 复杂性参量 3 显示结果的语句
printcp(fit)显示复杂性表
plotcp(fit)画交叉验证结果图
rsq.rpart(fit)R-squared
和 relative error for different splits (2 plots). labels are only appropriate for "anova" method.
print(fit)打印结果
summary(fit)基本信息
plot(fit)画
决策树text(fit)给树添加标签
post(fit,
file=)保存结果ps,pdf,等格式 #
Classification Tree with rpart
library(rpart)
# grow tree
fit <- rpart(Kyphosis ~ Age + Number + Start,
method="class", data=kyphosis)
printcp(fit) # display the results
plotcp(fit) # visualize cross-validation results
summary(fit) # detailed summary of splits
# plot tree
plot(fit, uniform=TRUE,
main="Classification Tree for Kyphosis")
text(fit, use.n=TRUE, all=TRUE, cex=.8)
# create attractive postscript plot of tree
post(fit, file = "G:/dataplay/tree.ps",
title = "Classification Tree for Kyphosis")pfit<- prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])
# plot the pruned tree
plot(pfit, uniform=TRUE,
main="Pruned Classification Tree for Kyphosis")
text(pfit, use.n=TRUE, all=TRUE, cex=.8)
post(pfit, file = "G:/dataplay/ptree.ps",
title = "Pruned Classification Tree for Kyphosis")