如何从`party`包中的`ctree()`构建的回归树中删除某些节点

时间:2014-05-08 07:28:53

标签: r decision-tree

我使用包ctree()中的party构建了一个回归树。 我的模型的结果有许多节点,它们包含相等的因变量概率(例如:A类= 0.33,B类= 0.33,C类= 0.33)。我想从模型中取出这些节点。包tree具有snip.tree()命令,我们可以在其中指定要从模型中删除的节点号。此命令无法识别使用ctree()构建的回归树。如果有办法从使用ctree()

构建的回归树中删除某些节点,请告诉我

我使用过该模型:

rv.mod1 <- ctree(ldclas ~ L2 + L3 + L4 + L5 + L6 + ele + ndvi + nd_var + nd_ps, data = rv, controls = ctree_control(minsplit = 0, minbucket = 0))
pr.rv.mod1 <- snip.tree(rv.mod1, nodes = nn2.rv.mod1$nodes)

nn2.rv.mod1 $ nodes是一个带有要从rv.mod1模型中删除的节点的向量。但是我收到一个错误:

Error in snip.tree(rv.mod1, nodes = nn2.rv.mod1$nodes) : 
  not legitimate tree

1 个答案:

答案 0 :(得分:0)

我认为没有直接的方法可以做到这一点,但我会提出一个&#34; hack&#34;使用weights中的ctree参数。

让我们从可重现的例子开始

library(party)
irisct <- ctree(Species ~ .,data = iris)
plot(irisct)

enter image description here

现在,假设您要删除节点号5.您可以执行以下操作

NewWeigths <- rep(1, dim(iris)[1]) # Setting a weights vector which will be passed into the `weights` attribute in `ctree`
Node <- 5 # Selecting node #5
n <- nodes(irisct, Node)[[1]] # Retrieving the weights of that node
NewWeigths[which(as.logical(n$weights))] <- 0 # Setting these weigths to zero, so `ctree` will disregard them
irisct2 <- ctree(Species ~ .,data = iris, weights = NewWeigths) # creating the new tree with new weights
plot(irisct2)

enter image description here

注意节点2,6和7(现在它们被命名为2,4和5,因为我们有较少的分割)仍然完全具有相同的分布和分裂条件。

我没有为所有节点测试它,但它似乎运行得相当不错