gpt4 book ai didi

r - 找到决策树中的最大值

转载 作者:行者123 更新时间:2023-11-30 09:21:32 25 4
gpt4 key购买 nike

我使用 R 中的 Party 包创建了决策树。我正在尝试获取具有最大值的路线/分支。

它可以是来自箱线图 Picture 1 的平均值

它可以是来自二叉树Picture 2的概率值
(来源:rdatamining.com)

最佳答案

这实际上可以很容易地完成,尽管对于回归树来说,最大值的定义是明确的,但对于分类来说却不是很清楚树,因为每个节点不同级别可以有自己的最大值

无论哪种方式,这里都有一个非常简单的辅助函数,它将返回每种类型树的预测

GetPredicts <- function(ct){
f <- function(ct, i) nodes(ct, i)[[1]]$prediction
Terminals <- unique(where(ct))
Predictions <- sapply(Terminals, f, ct = ct)
if(is.matrix(Predictions)){
colnames(Predictions) <- Terminals
return(Predictions)
} else {
return(setNames(Predictions, Terminals))
}
}

现在幸运的是,您已经从 ?ctree 的示例中获取了树,因此我们可以测试它们(下次,请提供您自己使用的代码)

<小时/>

回归树(您的第一棵树)

## load the package and create the tree
library(party)
airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq,
controls = ctree_control(maxsurrogate = 3))
plot(airct)

现在,测试该功能

res <- GetPredicts(airct)
res
# 5 3 6 9 8
# 18.47917 55.60000 31.14286 48.71429 81.63333

所以我们得到了每个终端节点的预测。您可以从此处轻松继续使用 which.max(res) (我将留给您决定)

<小时/>

分类树(您的第二棵树)

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

运行函数

res <- GetPredicts(irisct)
res
# 2 5 6 7
# [1,] 1 0.00000000 0.0 0.00000000
# [2,] 0 0.97826087 0.5 0.02173913
# [3,] 0 0.02173913 0.5 0.97826087

现在,输出有点难以阅读,因为每个类别都有自己的概率。您可以使用

使其更具可读性
row.names(res) <- levels(iris$Species)
res
# 2 5 6 7
# setosa 1 0.00000000 0.0 0.00000000
# versicolor 0 0.97826087 0.5 0.02173913
# virginica 0 0.02173913 0.5 0.97826087

您可以执行以下操作以获得总体最大值

which(res == max(res), arr.ind = TRUE)
# row col
# setosa 1 1

对于列/行最大值,您可以这样做

matrixStats::colMaxs(res)
# [1] 1.0000000 0.9782609 0.5000000 0.9782609
matrixStats::rowMaxs(res)
# [1] 1.0000000 0.9782609 0.9782609

但是,我再次让您决定如何从这里继续。

关于r - 找到决策树中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35599043/

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