我已经通过ctree
包使用party
功能构建了决策树。它有1700个节点。
首先,ctree
中是否有方法给出maxdepth
参数?我尝试了control_ctree
选项但是,它抛出了一些错误消息,说无法找到ctree函数。
另外,我该如何使用这棵树的输出?如何为SAS或SQL等其他平台实现。我还对节点末尾的值"* weights = 4349 "
表示什么有疑问。我怎么知道哪个终端节点对哪个预测值进行投票。
答案 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?