带权重的Ctree分类 - 显示结果

时间:2014-12-02 23:16:30

标签: r tree classification party

假设我想使用虹膜数据示例,但正确分类杂色对我来说要重要5倍。

library(party)
data(iris)
irisct <- ctree(Species ~ .,data = iris, weights=ifelse(iris$Species=='versicolor', 5, 1))
plot(irisct)

然后树形图改变每个节点中的观察数和条件概率(它将versicolor乘以5)。有没有办法“禁用”这个,即显示原始观察数量(虹膜总数= 150)?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

ctree()包中partykit的增强重新实现也具有更灵活的绘图功能。具体来说,node_barplot()面板函数获得了一个mainlab参数,可用于自定义主标签。例如,对于虹膜数据:

library("partykit")
ct <- ctree(Species ~ ., data = iris)

您可以设置标签向量,然后提供访问这些标签的函数:

lab <- paste("Foo", 1:7)
ml <- function(id, nobs) lab[as.numeric(id)]
plot(ct, tp_args = list(mainlab = ml))

当然,上面的示例并不是很有意义,但可以通过一些编码进行修改以达到您想要的效果。

但是,请注意使用weights参数对某些观测值进行上采样。 ctree()函数确实将weights视为案例权重,因此用于拆分的重要性测试会发生变化。随着观察数量的增加,所有p值变小,因此树选择更多分裂(除非同时增加mincriterion)。将上面的ct树与4个终端节点进行比较

ct2 <- ctree(Species ~ ., data = iris, weights = rep(2, 150))
ct3 <- ctree(Species ~ ., data = iris, weights = rep(2, 150), mincriterion = 0.999)

结果终端节点的数量是

c(width(ct), width(ct2), width(ct3))
[1] 4 6 4