如何使用rpart或party包过滤R中决策树中的自变量

时间:2018-01-25 10:50:06

标签: r decision-tree rpart party

我是SAS用户,目前正在研究如何使用R-package制作决策树。

我确实找到了与每个节点相关的好结果,但现在我面临3个问题:

  1. 我可以从特定变量(从上到下)开始,例如,像性别这样的分类变量吗? (我在FICO-Model构建器中做过,但现在我不再拥有它了)

  2. 我有二进制var(性别:1-Male / 0-Female),但节点分为0.5?(我尝试将其更改为因子,但不起作用?我还有一个var“ AGE“,我应该将类型更改为”xxx“而不是”数字“吗?)

  3. 根据cp值(下表),我设置0.0128修剪树,但只留下两个vars,我可以选择保留特定的变量吗?(我确实使用cp的数字,但结果没有变化)

  4. enter image description here

    enter image description here enter image description here

    #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") 
    

1 个答案:

答案 0 :(得分:1)

  1. 我不认为R中比较流行的树包之一有一个用于指定固定初始拆分的内置选项。但是,使用partykit程序包(party程序包的后继程序)可以利用基础结构将这些树组合在一起,只需一点点努力,请参阅:How to specify split in a decision tree in R programming?
  2. 您应该使用factor变量作为无序分类协变量(如性别),序数协变量的ordered因子,以及数字协变量的numericinteger。请注意,这可能不仅在视觉显示中很重要,而且在递归分区本身也很重要。使用类似rpart / CART的详尽搜索算法时,这是不相关的,但对于像ctreemob这样的无偏​​差推理算法,这可能是一个重要的区别。
  3. 成本复杂性修剪不允许保留特定的协变量。它是整个树的度量,而不是单个变量。