r - 如何给ctree(包方)的终端节点添加标签?

标签 r decision-tree party

我使用 ctree 创建了一个二叉分类树。我希望每个终端节点都包含与该节点关联的行名称。我怎样才能做到这一点?

例如,对于下面的数据集,我希望最左边的节点分别列出所有年龄 <23 岁(Abner 到 Abudemio)和最右边的 Abundiantus 到 Acelin 的人的名字。

      names       age height young   
1     Abner       18   76.1   yes
2     Abraham     19   77.0   yes
3     Abram       20   78.1   yes
4     Abrasha     21   78.2   yes
5     Absalom     22   78.8   yes
6     Abudemio    23   79.7   yes
7     Abundiantus 24   79.9    no
8     Acacio      25   81.1    no
9     Acario      26   81.2    no
10    Accursius   27   81.8    no
11    Ace         28   82.8    no
12    Acelin      29   83.5    no

. enter image description here

最佳答案

这是一个 hacky 解决方案。它对来自 party 的绘图函数的原始源代码进行了很少的修改。包裹。通过阅读源代码,我注意到有一个 terminal_panel正在调用 node_barplot如果结果是一个因素。 (所有内容都位于 R/plot.R 函数中,如果您安装了源包。)我们可以修改后面的内容以在默认条形图中显示自定义标签。

只需在 R 提示符下发出以下命令:

fixInNamespace("node_barplot", pos="package:party")

然后,开始添加我们想要的:

  1. 添加labels = NULL, gp = NULL到该函数的现有参数列表。
  2. 接近函数体末尾,grid.rect(gp = gpar(fill = "transparent")) 之后, 添加以下行:

    if (!is.null(labels)) {
      labs <- as.character(labels[ctreeobj@where==node$nodeID])
      len <- length(labs)
      x <- unit(rep(0.5, len), "npc")
      y <- unit(0.5:len/len, "npc")
      for (i in 1:len) 
        grid.text(labs[i], x=x[i], y=y[i], just="center", gp=gp)
    }
    

    这里的关键思想是选择与所选节点 (node$nodeID) 对应的标签,我们可以从插槽 where 中获取此信息的 ctree对象(这是一个向量,指示每个案例在哪个节点中结束)。 if test只是为了保证我们可以像原来写的那样使用函数。 gp参数可用于更改字体大小或颜色。

现在对该函数的典型调用是:

plot(cfit, tp_pars=list(labels=dfrm$names))

哪里dfrm$names是来自名为 dfrm 的数据框的一列标签.这是您的数据的说明:

cfit <- ctree(young ~ age, data=a, 
              controls=ctree_control(minsplit=2, minbucket=2))
plot(cfit, tp_args=list(labels=a$names, gp=gpar(fontsize=8, col="darkgrey")))

enter image description here

(我还使用 iris 数据集的在线示例对此进行了测试。)

关于r - 如何给ctree(包方)的终端节点添加标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449584/

相关文章:

python - 增加决策树中节点的大小

scikit-learn - 预排序会减慢大型决策树的训练吗?

python - R 或 Python 中的 CHAID 决策树

r - 如何更改 R 中 ctree 对象的绘图背景?

r - 在 R 中每月计算唯一值

r - 使用 RPostgreSQL 将数据写入表而不改变结构

r - BinaryTree (ctree, party) 的绘图忽略了 par() 的绘图选项

旋转分类树终端条形图轴 - R

r - 有没有办法强制 ode() [deSolve-R 包] 在 ode 函数中的每个积分步骤提供输出

r - 如何将原始类型/字节写入标准输出?