反向 "inequality sign" 在 rpart 或 partykit 内置的决策树中呈现顺序

reverse "inequality sign" presenting order in decision tree built in rpart or partykit

我已经使用 rpart 构建了一个多层决策树,我正在尝试使用 partykit 包复制树结构,更具体地说,partysplit-partynode组合。

我目前对 rpartpartysplit 之间的顺序差异有疑问。

来自rpart的决策树总是先"greater than"符号(>)然后"less than"符号(<)在下面,而partykit则相反。 例如,rpart 输出

 [6] value.a >= 33: FALSE. (n = 63, err = 33.3%)
 [7] value.a< 33: FALSE. (n = 74, err = 8.1%)

对比partykit 输出

 [6] value.a < 33: FALSE. (n = 74, err = 8.1%)
 [7] value.a >= 33: FALSE. (n = 63, err = 33.3%)

因此,我无法按正确顺序读取决策树并使用 partykitrpart 重新创建树。

有没有一种方法可以从 rpart 创建一棵树,比如树先取 "less than" 符号,或者在 partysplit 上有一个选项,这样你就可以进行拆分先拿"greater than"标志?

partysplit() 构造函数提供参数indexright 可用于创建所有组合。 index 控制间隔的左侧部分是第一个还是第二个。 right 参数控制等号的位置。对于一个简单的虚拟数据集:

d <- data.frame(x = 1:10)

我们可以为组合创建所有:

sp1 <- partysplit(1L, 5.5, index = 1:2, right = TRUE)
sp2 <- partysplit(1L, 5.5, index = 2:1, right = TRUE)
sp3 <- partysplit(1L, 5.5, index = 1:2, right = FALSE)
sp4 <- partysplit(1L, 5.5, index = 2:1, right = FALSE)

那么对应的字符标签可以计算为:

character_split(sp1, d)$levels
## [1] "<= 5.5" "> 5.5" 
character_split(sp2, d)$levels
## [1] "> 5.5"  "<= 5.5"
character_split(sp3, d)$levels
## [1] "< 5.5"  ">= 5.5"
character_split(sp4, d)$levels
## [1] ">= 5.5" "< 5.5" 

rpart 对象的 as.party() 方法试图保留这一点。例如:

library("partykit")
library("rpart")
iris2 <- iris[1:100,]
rp <- rpart(Species ~ ., data = iris2)
rp
## n= 100 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
## 1) root 100 50 setosa (0.5000000 0.5000000)  
##   2) Petal.Length< 2.45 50  0 setosa (1.0000000 0.0000000) *
##   3) Petal.Length>=2.45 50  0 versicolor (0.0000000 1.0000000) *
as.party(rp)
## Model formula:
## Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
## 
## Fitted party:
## [1] root
## |   [2] Petal.Length < 2.45: setosa (n = 50, err = 0.0%)
## |   [3] Petal.Length >= 2.45: versicolor (n = 50, err = 0.0%)
## 
## Number of inner nodes:    1
## Number of terminal nodes: 2