1 "rpart"包
rpart包中的rpart()函数:构建决策树,允许选择具有最小预测误差的决策树,然后在使用predict函数进行预测。
ls("package:rpart")
##[1] "car.test.frame" "car90" "cu.summary" "kyphosis" "meanvar"
[6] "na.rpart" "path.rpart" "plotcp" "post" "printcp"
[11] "prune" "prune.rpart" "rpart" "rpart.control" "rpart.exp"
[16] "rsq.rpart" "snip.rpart" "solder" "stagec" "xpred.rpart"
rpart包的rpart(formula, data, method, control, parms)函数:拟合rpart模型。formula为拟合公式;data为数据集;method:树的末端数据类型选择相应的变量分割方法:连续性method=“anova”,离散型method=“class”,计数型method=“poisson”,生存分析型method=“exp”;parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和information);control:为rpart算法的控制细节选项;cost我觉得是损失矩阵,在剪枝的时候,叶子节点的加权误差与父节点的误差进行比较,考虑损失矩阵的时候,从将“减少-误差”调整为“减少-损失”
rpart.control(minsplit = 20, minbucket = round(minsplit/3), cp = 0.01,
maxcompete = 4L, maxsurrogate = 5L, usesurrogate = 2L, xval = 10,
surrogatestyle = 0L, maxdepth = 30L, ...) 对树进行一些设置。 minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止;minbucket:叶子节点最小样本数;maxdepth:树的深度;cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度,将要被修剪的rpart复杂性参数;xval是10折交叉验证。
2.rpart包提供了复杂度损失修剪的修剪方法,printcp会告诉分裂到每一层,cp是多少,平均相对误差是多少
选择具有最小xerror的cp的办法
prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])
3. 画图的包(“rpart.plot”)
rpart.plot (x = stop("no 'x' arg"), type = 2, extra = "auto", under = FALSE,
fallen.leaves = TRUE, digits = 2, varlen = 0, faclen = 0,
cex = NULL, tweak = 1, snip = FALSE, box.palette = "auto",
shadow.col = 0, ...) 画出rpart(决策树)模型。x为rpart模型;extra在节点上显示额外的信息,不同的数字代表不同的类型(请参考帮助);branch控制分支线的形状,指定一个值在0(V形分支)和1(方形分支),默认情况下(fallen.leaves)为1否则为2;type为画图的类型,分为5种:
0默认。画一个分裂的标签,在叶子的每一个分裂标签和一个节点标签。
1标签所有节点,不只是树叶。
2像1,但绘制的标签下面的节点标签。
3为左、右方向画单独的拆分标签。
4像3,但标签的所有节点,不只是叶子节点,类似于文本。