gpt4 book ai didi

r - 在数据框中查找传递树模型中节点规则的数据元素?

转载 作者:行者123 更新时间:2023-12-04 09:42:50 25 4
gpt4 key购买 nike

所以我使用 rpart 包创建了一个树模型,我发现了一个有趣的规则,并想知道是否有一种简单的方法来查看该数据框中的哪些观察值通过了该规则。

使用 path.rpart 来查找它沿着树的路径,然后手动将这些过滤器输入到数据框中以查找它们似乎很乏味。有没有一种方法可以传递树和/或节点以及数据帧并返回该帧中在该节点处结束的所有元素?

最佳答案

我修改了path.rpart中的代码返回属于特定节点的数据子集,而不是返回有关该节点的信息。它的工作方式是单击绘图或传递节点,就像 path.rpart 一样。功能确实。这是代码

subset.rpart <- function (tree, df, nodes) {
if (!inherits(tree, "rpart"))
stop("Not a legitimate \"rpart\" object")
stopifnot(nrow(df)==length(tree$where))
frame <- tree$frame
n <- row.names(frame)
node <- as.numeric(n)

if (missing(nodes)) {
xy <- rpart:::rpartco(tree)
i <- identify(xy, n = 1L, plot = FALSE)
if(i> 0L) {
return( df[tree$where==i, ] )
} else {
return(df[0,])
}
}
else {
if (length(nodes <- rpart:::node.match(nodes, node)) == 0L)
return(df[0,])
return ( df[tree$where %in% as.numeric(nodes), ] )
}
}

我将在包中的一些示例数据上使用它
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
plot(fit)
text(fit)

rpart tree plot

然后在特定节点找到观察结果,运行
subset.rpart(fit, kyphosis)

并单击绘图上的一个节点。完成后,将返回该节点的所有观察结果。您必须使用相同的 data.frame用于建模以使其正常工作。除了单击一个点之外,您还可以传入您使用 path.rpart 发现的节点名称。
# path.rpart(fit)  
# node number: 10 ---> looks interesting
# root
# Start>=8.5
# Start< 14.5
# Age< 55

subset.rpart(fit, kyphosis, 10)
# Kyphosis Age Number Start
# 14 absent 1 4 12
# 20 absent 27 4 9
# 26 absent 9 5 13
# 37 absent 1 3 9
# 39 absent 20 6 9
# 42 absent 35 3 13
# 57 absent 2 3 13
# 59 absent 51 7 9
# 66 absent 17 4 10
# 69 absent 18 4 11
# 78 absent 26 7 13
# 81 absent 36 4 13

关于r - 在数据框中查找传递树模型中节点规则的数据元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com