遍历CHAID树R-需要按实例数排序
我有很多树,打印时有7页长。我不得不重新平衡数据,需要查看频率最高的分支机构,看看它们是否有意义——我需要确定不同集群的取消率 由于数据太长,我需要的是拥有最大的分支,然后我可以验证这些分支,而不是手动检查210个分支。我将有很多树,所以需要自动化这个来查看重要的结果 要使用的示例代码:遍历CHAID树R-需要按实例数排序,r,decision-tree,interpretation,R,Decision Tree,Interpretation,我有很多树,打印时有7页长。我不得不重新平衡数据,需要查看频率最高的分支机构,看看它们是否有意义——我需要确定不同集群的取消率 由于数据太长,我需要的是拥有最大的分支,然后我可以验证这些分支,而不是手动检查210个分支。我将有很多树,所以需要自动化这个来查看重要的结果 要使用的示例代码: library(CHAID) updatecars<-mtcars updatecars$cyl<-as.factor(updatecars$cyl) updatecars$vs<-as.fa
library(CHAID)
updatecars<-mtcars
updatecars$cyl<-as.factor(updatecars$cyl)
updatecars$vs<-as.factor(updatecars$vs)
updatecars$am<-as.factor(updatecars$am)
updatecars$gear<-as.factor(updatecars$gear)
plot(carsChaid)
carsChaid<-chaid(am~ cyl+vs+gear, data=updatecars)
carsChaid
库(CHAID)
updatecars当然有更好的方法,但这是可行的。显然,我们愿意提出修正和改进建议
我遇到的特别麻烦是创建所有组合的列表。当expand.grid超过3个因子时,它将停止工作。所以我必须在它的上面构建一个循环来创建完整的列表
All_canx_rates<-function(Var1,Var2,Var3,Var4,Var5,nametree){
df1<-data.frame("CanxRate"=0,"Num_Canx"=0,"Num_Cust"=0)
pars<-as.list(match.call()[-1])
a<-eval(pars$nametree)[,as.character(pars$Var1)]
b<-eval(pars$nametree)[,as.character(pars$Var2)]
c<-eval(pars$nametree)[,as.character(pars$Var3)]
d<-eval(pars$nametree)[,as.character(pars$Var4)]
e<-eval(pars$nametree)[,as.character(pars$Var5)]
allcombos<-expand.grid(levels(a),levels(b),levels(c))
clean<- allcombos
allcombos$Var4<-d[1]
for (i in 2:length(levels(d))) {
clean$Var4<-levels(d)[i]
allcombos<-rbind(allcombos,clean)
}
#define a forloop
for (i in 1:nrow(allcombos)) {
#define values
f1<-allcombos[i,1]
f2<-allcombos[i,2]
f3<-allcombos[i,3]
f4<-allcombos[i,4]
y5<-nrow(nametree[(a %in% f1 & b %in% f2 & c %in% f3 & d %in% f4 &
e =='1'),])
y4<-nrow(nametree[(a %in% f1 & b %in% f2 & c %in% f3 & d %in% f4),])
df2<-data.frame("CanxRate"=y5/y4,"Num_Canx"=y5,"Num_Cust"=y4)
df1<-rbind(df1, df2)
}
#endforloop
#make the dataframe available for global viewing
df1<-df1[-1,]
output<<-cbind(allcombos,df1)
}
All_canx_rates您可以使用data.tree对party对象执行进一步的操作,如排序、遍历树、自定义绘图等。github的最新版本v0.3.7具有party类对象的转换:
devtools::install_github("gluc/data.tree@v0.3.7")
library(data.tree)
tree <- as.Node(carsChaid)
tree$fieldsAll
您可以按函数排序,例如每个节点上的数据行:
tree$Sort(attribute = function(node) nrow(node$data), decreasing = TRUE)
print(tree,
"splitname",
count = function(node) nrow(node$data),
"splitLevel")
例如,这打印如下:
levelName splitname count splitLevel
1 1 gear 32
2 ¦--3 17 4, 5
3 °--2 15 3
levelName splitname count splitLevel
1 1 gear 32
2 ¦--3 17 4, 5
3 °--2 15 3