gpt4 book ai didi

r - cforest 打印空树

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

我正在尝试使用 cforest 函数(R,派对包)。

这就是我为构建森林所做的工作:

library("party")
set.seed(42)
readingSkills.cf <- cforest(score ~ ., data = readingSkills,
control = cforest_unbiased(mtry = 2, ntree = 50))

然后我想打印第一棵树,然后我做
party:::prettytree(readingSkills.cf@ensemble[[1]],names(readingSkills.cf@data@get("input")))

结果看起来像这样
     1) shoeSize <= 28.29018; criterion = 1, statistic = 89.711
2) age <= 6; criterion = 1, statistic = 48.324
3) age <= 5; criterion = 0.997, statistic = 8.917
4)* weights = 0
3) age > 5
5)* weights = 0
2) age > 6
6) age <= 7; criterion = 1, statistic = 13.387
7) shoeSize <= 26.66743; criterion = 0.214, statistic = 0.073
8)* weights = 0
7) shoeSize > 26.66743
9)* weights = 0
6) age > 7
10)* weights = 0
1) shoeSize > 28.29018
11) age <= 9; criterion = 1, statistic = 36.836
12) nativeSpeaker == {}; criterion = 0.998, statistic = 9.347
13)* weights = 0
12) nativeSpeaker == {}
14)* weights = 0
11) age > 9
15) nativeSpeaker == {}; criterion = 1, statistic = 19.124
16) age <= 10; criterion = 1, statistic = 18.441
17)* weights = 0
16) age > 10
18)* weights = 0
15) nativeSpeaker == {}
19)* weights = 0

为什么是空的(每个节点的权重都为零)?

最佳答案

简短回答:案例权重 weights在每个节点是 NULL ,即不存储。 prettytree函数输出 weights = 0 , 自 sum(NULL)在 R 中等于 0。

考虑以下 ctree例子:

library("party")
x <- ctree(Species ~ ., data=iris)
plot(x, type="simple")

ctree plot

对于结果对象 x (类 BinaryTree)案例权重存储在每个节点中:
R> sum(x@tree$left$weights)
[1] 50
R> sum(x@tree$right$weights)
[1] 100
R> sum(x@tree$right$left$weights)
[1] 54
R> sum(x@tree$right$right$weights)
[1] 46

现在让我们仔细看看 cforest :
y <- cforest(Species ~ ., data=iris, control=cforest_control(mtry=2))
tr <- party:::prettytree(y@ensemble[[1]], names(y@data@get("input")))
plot(new("BinaryTree", tree=tr, data=y@data, responses=y@responses))

cforest tree

案例权重不存储在树集成中,可以通过以下方式看到:
fixInNamespace("print.TerminalNode", "party")

更改 print方法
function (x, n = 1, ...)·                                                     
{
print(names(x))
print(x$weights)
cat(paste(paste(rep(" ", n - 1), collapse = ""), x$nodeID,·
")* ", sep = "", collapse = ""), "weights =", sum(x$weights),·
"\n")
}

现在我们可以观察到 weightsNULL在每个节点中:
R> tr
1) Petal.Width <= 0.4; criterion = 10.641, statistic = 10.641
[1] "nodeID" "weights" "criterion" "terminal" "psplit"
[6] "ssplits" "prediction" "left" "right" NA
NULL
2)* weights = 0
1) Petal.Width > 0.4
3) Petal.Width <= 1.6; criterion = 8.629, statistic = 8.629
[1] "nodeID" "weights" "criterion" "terminal" "psplit"
[6] "ssplits" "prediction" "left" "right" NA
NULL
4)* weights = 0
3) Petal.Width > 1.6
[1] "nodeID" "weights" "criterion" "terminal" "psplit"
[6] "ssplits" "prediction" "left" "right" NA
NULL
5)* weights = 0

更新 这是一个显示案例权重总和的技巧:
update_tree <- function(x) {
if(!x$terminal) {
x$left <- update_tree(x$left)
x$right <- update_tree(x$right)
} else {
x$weights <- x[[9]]
x$weights_ <- x[[9]]
}
x
}
tr_weights <- update_tree(tr)
plot(new("BinaryTree", tree=tr_weights, data=y@data, responses=y@responses))

cforest tree with case weights

关于r - cforest 打印空树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924402/

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