我创建了一个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函数一段时间,找不到可以帮助我提取我刚刚列出的那些信息的函数。
有人可以帮帮我吗?谢谢!答案 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