如何使用 rpart 或 party 包过滤 R 中决策树中的自变量
How to filter independent variables in decision-tree in R with rpart or party package
我是 SAS 用户,目前正在研究如何使用 R 包制作决策树。
我确实有一个与每个节点相关的好发现,但现在我面临 3 个问题:
我可以从特定变量(从上到下)开始,比如性别之类的分类变量吗? (我在 FICO-Model builder 中做过,但现在我没有了)
我有一个二进制 var(gender:1-Male/0-Female),但节点以 0.5 分裂?(我尝试将其更改为 factor,但没有用?还有我有一个 var "AGE",我应该将类型更改为 "xxx" 而不是 "numeric" 吗?)
根据cp值(低于table),我设置0.0128修剪树,但只剩下两个变量,我可以选择保留特定的变量吗?(我玩cp的数量,但结果没有改变)
#tree
library(rpart)
library(party)
library(rpart.plot)
#1
minsplit<-60
ct <- rpart.control(xval=10, minsplit=minsplit,minbucket =
minsplit/3,cp=0.01)
iris_tree <- rpart(Overday_E60dlq ~ .
,
data= x, method="class",
parms = list(prior = c(0.65,0.35), split = "information")
,control=ct)
#plot split.
plot_tris<-rpart.plot(iris_tree, branch=1 , branch.type= 1, type= 2, extra=
103,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
cex=0.65, main="Kyphosis-tree")
plot_tris
#summary
summary(iris_tree)
#===========prune process=========
printcp(iris_tree)
## min-xerror cp:
fitcp<-prune(iris_tree, cp=
iris_tree$cptable[which.min(iris_tree$cptable[,"xerror"]),"CP"])
#cp table
fit2<-prune(fitcp,cp= 0.0128 )
#plot fit2
rpart.plot(fit2, branch=1 , branch.type= 1, type= 2, extra= 103,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
cex=0.65, main="Kyphosis fit2")
- 我认为 R 中最流行的树包之一没有用于指定固定初始拆分的内置选项。然而,使用
partykit
包(party
包的后继包)具有可以利用的基础结构,只需一点点努力就可以将这些树组合在一起,请参阅:How to specify split in a decision tree in R programming?
- 您应该对无序分类协变量(如性别)使用
factor
变量,对序数协变量使用 ordered
因子,对数字协变量使用 numeric
或 integer
。请注意,这可能不仅在视觉显示中很重要,而且在递归分区本身中也很重要。当使用像 rpart
/CART 这样的穷举搜索算法时,它是不相关的,但对于像 ctree
或 mob
这样的基于推理的无偏算法,这可能是一个重要的区别。
- 成本复杂性修剪不允许保留特定的协变量。它是对整体树的度量,而不是对单个变量的度量。
我是 SAS 用户,目前正在研究如何使用 R 包制作决策树。
我确实有一个与每个节点相关的好发现,但现在我面临 3 个问题:
我可以从特定变量(从上到下)开始,比如性别之类的分类变量吗? (我在 FICO-Model builder 中做过,但现在我没有了)
我有一个二进制 var(gender:1-Male/0-Female),但节点以 0.5 分裂?(我尝试将其更改为 factor,但没有用?还有我有一个 var "AGE",我应该将类型更改为 "xxx" 而不是 "numeric" 吗?)
根据cp值(低于table),我设置0.0128修剪树,但只剩下两个变量,我可以选择保留特定的变量吗?(我玩cp的数量,但结果没有改变)
#tree
library(rpart)
library(party)
library(rpart.plot)
#1
minsplit<-60
ct <- rpart.control(xval=10, minsplit=minsplit,minbucket =
minsplit/3,cp=0.01)
iris_tree <- rpart(Overday_E60dlq ~ .
,
data= x, method="class",
parms = list(prior = c(0.65,0.35), split = "information")
,control=ct)
#plot split.
plot_tris<-rpart.plot(iris_tree, branch=1 , branch.type= 1, type= 2, extra=
103,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
cex=0.65, main="Kyphosis-tree")
plot_tris
#summary
summary(iris_tree)
#===========prune process=========
printcp(iris_tree)
## min-xerror cp:
fitcp<-prune(iris_tree, cp=
iris_tree$cptable[which.min(iris_tree$cptable[,"xerror"]),"CP"])
#cp table
fit2<-prune(fitcp,cp= 0.0128 )
#plot fit2
rpart.plot(fit2, branch=1 , branch.type= 1, type= 2, extra= 103,
shadow.col="gray", box.col="green",
border.col="blue", split.col="red",
cex=0.65, main="Kyphosis fit2")
- 我认为 R 中最流行的树包之一没有用于指定固定初始拆分的内置选项。然而,使用
partykit
包(party
包的后继包)具有可以利用的基础结构,只需一点点努力就可以将这些树组合在一起,请参阅:How to specify split in a decision tree in R programming? - 您应该对无序分类协变量(如性别)使用
factor
变量,对序数协变量使用ordered
因子,对数字协变量使用numeric
或integer
。请注意,这可能不仅在视觉显示中很重要,而且在递归分区本身中也很重要。当使用像rpart
/CART 这样的穷举搜索算法时,它是不相关的,但对于像ctree
或mob
这样的基于推理的无偏算法,这可能是一个重要的区别。 - 成本复杂性修剪不允许保留特定的协变量。它是对整体树的度量,而不是对单个变量的度量。