如何判断ctree是否只是一个根节点?
How to tell if a ctree is just a root node?
假设我适合这样的模型:
ctree(Age ~ Kyphosis, data = kyphosis, mincriterion = 1)
我怎样才能得到拆分的数量?我怎么知道它是否只是一个根节点?
编辑:
使用的包:
library(caret)
library(party)
library(partykit)
library(plyr)
library(xtable)
当我尝试使用 tree.size
时出错,如下面的答案所列:
> tree.size(ctree(Age ~ Kyphosis, data = kyphosis, mincriterion = 1)@tree)
Error in tree.size(ctree(Age ~ Kyphosis, data = kyphosis, mincriterion = 1)@tree) :
trying to get slot "tree" from an object (class "constparty") that is not an S4 object
从派对包文档中,拟合模型中的 tree
槽是树的递归表示。您可以构建自己的递归函数来确定树的大小:
tree.size <- function(tree) {
if (is.null(tree)) {
return(0)
} else {
return(1 + tree.size(tree$left) + tree.size(tree$right))
}
}
我们可以用只包含根节点的树和包含多个节点的树来测试函数:
library(rpart) # for kyphosis
library(party) # for ctree
mod1 <- ctree(Age ~ Kyphosis, data = kyphosis)
tree.size(mod1@tree)
# [1] 1
mod2 <- ctree(Petal.Width~., data=iris)
tree.size(mod2@tree)
# [1] 11
更新: 根据更新后的问题,看来 OP 实际上是在使用 partykit:::ctree
函数而不是 party:::ctree
函数。事实证明,这很容易获得树的大小,因为返回的模型是节点列表,所以只需要 length
函数。
library(partykit)
mod1 <- partykit:::ctree(Age ~ Kyphosis, data = kyphosis)
length(mod1)
# [1] 1
mod2 <- partykit:::ctree(Petal.Width~., data=iris)
length(mod2)
# [1] 11
这个问题的另一个answers/discussions没有问题,我只是想补充一点detail/context以防其他用户遇到相同或相似的问题。
虽然旧 party
和新 partykit
包中的 ctree()
函数的许多方面保持不变以简化转换,但几乎所有的 R 和 C 代码被重写和简化,内部表示是全新的。旧的 ctree()
返回了一个 S4 对象,该对象不够灵活,无法满足我们想用它做的所有事情。新的 ctree()
函数 returns class "constparty"
的一个对象(用于每个节点中常量拟合的递归分区)继承自通用 "party"
class.
节点数可以用length()
方式查询,终端节点数用width()
方式查询。 print()
方法中还报告了节点数。最后,可以通过nodeids()
查询节点ID。对于只有根节点的树:
data("kyphosis", package = "rpart")
library("partykit")
ct1 <- ctree(Age ~ ., data = kyphosis)
length(ct1)
[1] 1
width(ct1)
[1] 1
对于更大的树:
(ct2 <- ctree(Number ~ ., data = kyphosis))
Model formula:
Number ~ Kyphosis + Age + Start
Fitted party:
[1] root
| [2] Start <= 15: 4.475 (n = 59, err = 152.7)
| [3] Start > 15: 2.909 (n = 22, err = 17.8)
Number of inner nodes: 1
Number of terminal nodes: 2
length(ct2)
[1] 3
width(ct2)
[1] 2
nodeids(ct2)
[1] 1 2 3
nodeids(ct2, terminal = TRUE)
[1] 2 3
包插图还提供了许多其他有用的详细信息。 vignette("partykit", package = "partykit")
对包及其 class 进行了一般介绍; vignette("constparty", package = "partykit")
描述了具有常量拟合的树的 class; vignette("ctree", package = "partykit")
提供有关 ctree()
.
的更多详细信息
假设我适合这样的模型:
ctree(Age ~ Kyphosis, data = kyphosis, mincriterion = 1)
我怎样才能得到拆分的数量?我怎么知道它是否只是一个根节点?
编辑:
使用的包:
library(caret)
library(party)
library(partykit)
library(plyr)
library(xtable)
当我尝试使用 tree.size
时出错,如下面的答案所列:
> tree.size(ctree(Age ~ Kyphosis, data = kyphosis, mincriterion = 1)@tree)
Error in tree.size(ctree(Age ~ Kyphosis, data = kyphosis, mincriterion = 1)@tree) :
trying to get slot "tree" from an object (class "constparty") that is not an S4 object
从派对包文档中,拟合模型中的 tree
槽是树的递归表示。您可以构建自己的递归函数来确定树的大小:
tree.size <- function(tree) {
if (is.null(tree)) {
return(0)
} else {
return(1 + tree.size(tree$left) + tree.size(tree$right))
}
}
我们可以用只包含根节点的树和包含多个节点的树来测试函数:
library(rpart) # for kyphosis
library(party) # for ctree
mod1 <- ctree(Age ~ Kyphosis, data = kyphosis)
tree.size(mod1@tree)
# [1] 1
mod2 <- ctree(Petal.Width~., data=iris)
tree.size(mod2@tree)
# [1] 11
更新: 根据更新后的问题,看来 OP 实际上是在使用 partykit:::ctree
函数而不是 party:::ctree
函数。事实证明,这很容易获得树的大小,因为返回的模型是节点列表,所以只需要 length
函数。
library(partykit)
mod1 <- partykit:::ctree(Age ~ Kyphosis, data = kyphosis)
length(mod1)
# [1] 1
mod2 <- partykit:::ctree(Petal.Width~., data=iris)
length(mod2)
# [1] 11
这个问题的另一个answers/discussions没有问题,我只是想补充一点detail/context以防其他用户遇到相同或相似的问题。
虽然旧 party
和新 partykit
包中的 ctree()
函数的许多方面保持不变以简化转换,但几乎所有的 R 和 C 代码被重写和简化,内部表示是全新的。旧的 ctree()
返回了一个 S4 对象,该对象不够灵活,无法满足我们想用它做的所有事情。新的 ctree()
函数 returns class "constparty"
的一个对象(用于每个节点中常量拟合的递归分区)继承自通用 "party"
class.
节点数可以用length()
方式查询,终端节点数用width()
方式查询。 print()
方法中还报告了节点数。最后,可以通过nodeids()
查询节点ID。对于只有根节点的树:
data("kyphosis", package = "rpart")
library("partykit")
ct1 <- ctree(Age ~ ., data = kyphosis)
length(ct1)
[1] 1
width(ct1)
[1] 1
对于更大的树:
(ct2 <- ctree(Number ~ ., data = kyphosis))
Model formula:
Number ~ Kyphosis + Age + Start
Fitted party:
[1] root
| [2] Start <= 15: 4.475 (n = 59, err = 152.7)
| [3] Start > 15: 2.909 (n = 22, err = 17.8)
Number of inner nodes: 1
Number of terminal nodes: 2
length(ct2)
[1] 3
width(ct2)
[1] 2
nodeids(ct2)
[1] 1 2 3
nodeids(ct2, terminal = TRUE)
[1] 2 3
包插图还提供了许多其他有用的详细信息。 vignette("partykit", package = "partykit")
对包及其 class 进行了一般介绍; vignette("constparty", package = "partykit")
描述了具有常量拟合的树的 class; vignette("ctree", package = "partykit")
提供有关 ctree()
.