R从partykit决策树中提取终端节点信息

时间:2017-06-05 19:46:44

标签: r nodes extract decision-tree party

我创建了一个constparty决策树(自定义拆分规则)并打印出树结果。结果如下:

Fitted party:
[1] root
|   [2] value.a < 1651: 0.067 (n = 1419, err = 88.6)
|   [3] value.a >= 1651: 0.571 (n = 7, err = 1.7)

我正在尝试提取终端节点信息 (yval:0.067和0.571; 每个节点上的n:1419和7; 和错误:88.6和1.7)并将它们放入一个列表中,同时具有相应的节点ID(节点ID 2和3),以便我可以在以后使用这些信息。

我一直在研究partykit函数一段时间,找不到可以帮助我提取我刚刚列出的那些信息的函数。

有人可以帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

与往常一样,有几种方法可以获取您正在寻找的信息。提取存储在特定info中的node的技术方法是使用nodeapply(object, ids, info_node),其中info_node返回存储在相应节点中的信息列表。

但是,在constparty个对象的终端节点中没有存储任何内容。相反,存储拟合节点的响应的整个分布,并且可以由fitted(object)提取。这包含一个数据框,其中包含观察到的(response) (fitted)节点和观察(weights)(如果有)。然后,您可以轻松地使用tapply()aggregate()或类似的东西来计算节点方式等。

或者,您可以将constparty对象转换为simpleparty对象,该对象将打印的信息存储在节点中并提取它。

这两个策略的工作示例是cars数据的简单回归树:

library("partykit")
data("cars", package = "datasets")
ct <- ctree(dist ~ speed, data = cars)

然后,您可以通过

轻松计算节点mean
with(fitted(ct), tapply(`(response)`, `(fitted)`, mean))
##        3        4        5 
## 18.20000 39.75000 65.26316 

当然,您可以将mean替换为您感兴趣的任何其他摘要统计信息。

nodeapply()的{​​{1}}可以通过以下方式获取:

simpleparty