如何实现使用ctree(party package)构建的决策树的输出?

时间:2013-08-23 09:33:28

标签: r decision-tree party

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

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

1 个答案:

答案 0 :(得分:3)

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() - How to get the list of splitting conditions for each terminal node?