4

我已经通过包使用该ctree功能构建了一个决策树。party它有1700个节点。首先,有没有办法ctree提出maxdepth论点?我尝试control_ctree了选项,但是它抛出了一些错误消息,说找不到 ctree 函数。

另外,我怎样才能消耗这棵树的输出?如何为 SAS 或 SQL 等其他平台实现它。"* weights = 4349 "我对节点末尾的值表示什么还有另一个疑问。我怎么知道,哪个终端节点投票给哪个预测值。

4

1 回答 1

4

ctree中有一个maxdepth选项。它位于ctree_control()

您可以按如下方式使用它

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

您还可以将拆分大小和存储桶大小限制为“不小于”

airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(minsplit= 50, minbucket = 20))

您还可以降低灵敏度并降低 P 值

airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(mincriterion = 0.99))

weights = 4349您提到的只是该特定节点中的观察数。ctree默认为每个观察值赋予 1 的权重,但如果您认为您的观察值值得更大的权重,您可以向其添加一个权重向量,该向量ctree()必须与数据集的长度相同并且必须是非负整数。完成此操作后,weights = 4349必须谨慎解释遗嘱。

一种使用方法weights是查看哪些观察结果落在某个节点中。使用上面示例中的数据,我们可以执行以下操作

airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(maxdepth = 3))
unique(where(airct)) #in order the get the terminal nodes
[1] 5 3 6 9 8

例如,我们可以检查节点 5 中的内容

n <- nodes(airct , 5)[[1]]
x <- airq[which(as.logical(n$weights)), ]  
x
    Ozone Solar.R Wind Temp Month Day
1      41     190  7.4   67     5   1
2      36     118  8.0   72     5   2
3      12     149 12.6   74     5   3
4      18     313 11.5   62     5   4
...

使用这种方法,您可以创建包含终端节点信息的数据集,然后将它们导入 SAS 或 SQL

您还可以使用我在 ctree() 下面的答案中的函数获取拆分条件列表 - 如何获取每个终端节点的拆分条件列表?

于 2014-03-24T11:28:36.873 回答