使用 rpart.plot 功能绘制 ctree
Plot ctree using rpart.plot functionality
一直在尝试使用 rpart.plot
包从 partykit
库中绘制 ctree
。原因是当树很深时默认的 plot 方法很糟糕。就我而言,我的 max_depth = 5
.
我真的很喜欢 rpart.plot
的输出,因为它允许更深的树在视觉上更好地显示。输出如何寻找一个简单的例子:
rpart
library(partykit)
library(rpart)
library(rpart.plot)
df_test <- cu.summary[complete.cases(cu.summary),]
multi.class.model <- rpart(Reliability~., data = df_test)
rpart.plot(multi.class.model)
我想使用 ctree
从 partykit 模型中得到这个输出
ctree
multi.class.model <- ctree(Reliability~., data = df_test)
rpart.plot(multi.class.model)
>Error: the object passed to prp is not an rpart object
有没有什么方法可以将 ctree 对象强制为 rpart
这样 运行?
据我所知,所有其他用于可视化 rpart
树的软件包实际上都是 rpart
特定的,而不是基于不可知的 party
class 来表示trees/recursive 个分区。此外,我们还没有尝试为 party
对象实现 as.rpart()
方法,因为 rpart
class 确实不太适合这个。
但您可以尝试调整 partykit
可视化效果,这些可视化效果可通过面板功能针对树的几乎所有方面进行自定义。可能有用的一件事是计算一个 simpleparty
对象,该对象在每个节点的 $info
中具有各种简单的摘要信息。然后可以在 node_terminal()
面板函数中使用它来在树形显示中打印信息。考虑以下用于预测德国社会经济面板中三种学校类型之一的简单示例。为了达到所需的深度,我基本关闭了重要性测试:
library("partykit")
data("GSOEP9402", package = "AER")
ct <- ctree(school ~ ., data = GSOEP9402, maxdepth = 5, alpha = 0.5)
足够大的设备上的默认值 plot(ct)
为您提供:
将树变成 simpleparty
时,默认情况下您会得到一个文本摘要:
st <- as.simpleparty(ct)
plot(st)
这仍然有重叠的标签,所以我们可以设置一个小的便利函数,从每个节点的 $info
中提取有趣的位,并将它们放入一个较长的字符向量中,条目宽度较小:
myfun <- function(i) c(
as.character(i$prediction),
paste("n =", i$n),
format(round(i$distribution/i$n, digits = 3), nsmall = 3)
)
plot(st, tp_args = list(FUN = myfun), ep_args = list(justmin = 20))
除了终端面板函数 (tp_args
) 的参数外,我还调整了边缘面板函数 (ep_args
) 的参数,以避免边缘出现一些重叠。
当然,您也可以更改整个面板功能并自己滚动...
一直在尝试使用 rpart.plot
包从 partykit
库中绘制 ctree
。原因是当树很深时默认的 plot 方法很糟糕。就我而言,我的 max_depth = 5
.
我真的很喜欢 rpart.plot
的输出,因为它允许更深的树在视觉上更好地显示。输出如何寻找一个简单的例子:
rpart
library(partykit)
library(rpart)
library(rpart.plot)
df_test <- cu.summary[complete.cases(cu.summary),]
multi.class.model <- rpart(Reliability~., data = df_test)
rpart.plot(multi.class.model)
我想使用 ctree
从 partykit 模型中得到这个输出ctree
multi.class.model <- ctree(Reliability~., data = df_test)
rpart.plot(multi.class.model)
>Error: the object passed to prp is not an rpart object
有没有什么方法可以将 ctree 对象强制为 rpart
这样 运行?
据我所知,所有其他用于可视化 rpart
树的软件包实际上都是 rpart
特定的,而不是基于不可知的 party
class 来表示trees/recursive 个分区。此外,我们还没有尝试为 party
对象实现 as.rpart()
方法,因为 rpart
class 确实不太适合这个。
但您可以尝试调整 partykit
可视化效果,这些可视化效果可通过面板功能针对树的几乎所有方面进行自定义。可能有用的一件事是计算一个 simpleparty
对象,该对象在每个节点的 $info
中具有各种简单的摘要信息。然后可以在 node_terminal()
面板函数中使用它来在树形显示中打印信息。考虑以下用于预测德国社会经济面板中三种学校类型之一的简单示例。为了达到所需的深度,我基本关闭了重要性测试:
library("partykit")
data("GSOEP9402", package = "AER")
ct <- ctree(school ~ ., data = GSOEP9402, maxdepth = 5, alpha = 0.5)
足够大的设备上的默认值 plot(ct)
为您提供:
将树变成 simpleparty
时,默认情况下您会得到一个文本摘要:
st <- as.simpleparty(ct)
plot(st)
这仍然有重叠的标签,所以我们可以设置一个小的便利函数,从每个节点的 $info
中提取有趣的位,并将它们放入一个较长的字符向量中,条目宽度较小:
myfun <- function(i) c(
as.character(i$prediction),
paste("n =", i$n),
format(round(i$distribution/i$n, digits = 3), nsmall = 3)
)
plot(st, tp_args = list(FUN = myfun), ep_args = list(justmin = 20))
除了终端面板函数 (tp_args
) 的参数外,我还调整了边缘面板函数 (ep_args
) 的参数,以避免边缘出现一些重叠。
当然,您也可以更改整个面板功能并自己滚动...