如何提取ctree()终端节点的拆分规则

Deb*_*bie 2 r party decision-tree

我有一个包含6个分类变量的数据集,其级别从5到28.我从ctree()(聚会包)获得了17个终端节点的输出.我跟随了来自ctree()的@Galled的输入- 如何获取每个终端节点的拆分条件列表?达到我想要的输出.

但是,运行代码后出现以下错误:

Error in data.frame(ResulTable, Means, Counts) : 
  arguments imply differing number of rows: 17, 2
Run Code Online (Sandbox Code Playgroud)

我试过添加这些额外的行:

ResulTable <- rbind(ResulTable, cbind(Node = Node, Path = Path2))

ResulTable$Node <- rownames(ResulTable)

melt(ResulTable)
Run Code Online (Sandbox Code Playgroud)

但到目前为止没有成功.有关它出错的地方的任何指示?

Ach*_*eis 7

我建议使用新的partykit实现ctree()而不是旧的party包,然后你可以使用该功能.list.rules.party().这尚未正式导出,但可用于提取所需信息.

library("partykit")
airq <- subset(airquality, !is.na(Ozone))
ct <- ctree(Ozone ~ ., data = airq)
partykit:::.list.rules.party(ct)
##                                      3                                      5 
##             "Temp <= 82 & Wind <= 6.9" "Temp <= 82 & Wind > 6.9 & Temp <= 77" 
##                                      6                                      8 
##  "Temp <= 82 & Wind > 6.9 & Temp > 77"             "Temp > 82 & Wind <= 10.3" 
##                                      9 
##              "Temp > 82 & Wind > 10.3" 
Run Code Online (Sandbox Code Playgroud)

  • 在将来自数据集的 p 值与数十万个观察值进行比较时,旧的“party”实现可能会遇到数值问题。新的“partykit”实现使用 log-p-values 代替,它在数值上更稳定。对于您的数据,这似乎会导致“partykit”持续更长时间的拆分差异。我建议不要只使用默认值,而是将 `mincriterion`、`minbucket` 或 `maxdepth` 限制为更适合您的数据的值。 (2认同)