gpt4 book ai didi

r - 从 ctree 对象中提取预测变量

转载 作者:行者123 更新时间:2023-12-03 21:38:13 25 4
gpt4 key购买 nike

我查过 binary tree类方法,以及 How to extract tree structure from ctree function? (这有助于理解 S4 对象结构和插槽),但仍不清楚如何获得 ctree 的最终预测值。目的。对于 rpart ,我会使用类似的东西

 extract_preds <- function( tt ){
leaves <- tt$frame$var == '<leaf>'
as.character( unique( tt$frame$var[ leaves==F ] ) )
}

是否有类似的快捷方式可用,或者我必须编写一个递归函数来遍历 ctree对象并提取预测变量?那,还是带有打印输出的正则表达式?谢谢。

更新:使用 贝多甘姆 的代码如下。还得想办法更新 res正确地通过递归:
 library(party)

ctree_preds <- function(tr,vnames){
res <- character(0)
traverse <- function(treenode,vnames,res){
if(treenode$terminal){
return(res)
} else {
res <- c(res,vnames[treenode$psplit$variableID])
traverse(treenode$left , vnames, res )
traverse(treenode$right, vnames, res )
}
}
traverse(tr,vnames,res)
return(unique(res))
}

airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq,
controls = ctree_control(maxsurrogate = 3))
plot(airct)

ctree_preds(airct@tree,names(airq)[-1])

最佳答案

下面是我实现的从 ctree 遍历树的脚本目的。我在 party 中使用了相同的示例包是 airct数据集。

require(party)
data(airquality)

traverse <- function(treenode){
if(treenode$terminal){
bas=paste("Current node is terminal node with",treenode$nodeID,'prediction',treenode$prediction)
print(bas)
return(0)
} else {
bas=paste("Current node",treenode$nodeID,"Split var. ID:",treenode$psplit$variableName,"split value:",treenode$psplit$splitpoint,'prediction',treenode$prediction)
print(bas)
}
traverse(treenode$left)
traverse(treenode$right)
}

airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq,
controls = ctree_control(maxsurrogate = 3))
plot(airct)

traverse(airct@tree)

这个功能, traverse ,只是以深度优先的顺序遍历树。您可以通过更改递归部分来更改遍历的顺序。

此外,如果您想返回其他节点特征,我建议您检查 ctree 对象的结构。

编辑:小代码修订。

关于r - 从 ctree 对象中提取预测变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713275/

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