我可以手动创建RWeka决策(递归分区)树吗?

时间:2015-06-19 02:31:33

标签: r weka decision-tree

我使用RWeka构建了一个J48决策树。我想将其性能与描述现有(外部计算的)决策树的决策树进行比较。我是RWeka的新手,我在手动创建RWeka决策树时遇到了麻烦。理想情况下,我想并排显示两个并使用RWeka可视化绘制它们(它非常丰富且干净)。

现在,我要将RWeka计算的决策树导出到Graphviz并将其操作到我想要的结构中。我想在开始之前检查并确保我不能简单地指定我想手动指定决策树的规则。

我不想计算决策树(我已经完成了),我想手动构建/指定决策树(在我的演示文稿中进行统一比较)。

先谢谢你。

2 个答案:

答案 0 :(得分:2)

RWeka包本身不能这样做。但是,RWeka使用partykit包来显示其可以执行您想要的树的树。查看vignette(“partykit“, package = “partykit“)如何使用预先指定的partynode构建递归partysplit对象,然后将其转换为constparty。小插图有一个动手实例。

答案 1 :(得分:2)

以下是partykit建议的包@Achim Zeileis的一些示例代码。

library(partykit)

加载数据:

data("WeatherPlay", package = "partykit")
WeatherPlay
#  outlook temperature humidity windy play
#  1 sunny 85 85 false no
#  2 sunny 80 90 true no
#  3 overcast 83 86 false yes
#  4 rainy 70 96 false yes
#  5 rainy 68 80 false yes
#  6 rainy 65 70 true no
#  7 overcast 64 65 true yes
...

初步决定: integer 1L表示此拆分适用的尚未指定的数据框的列。索引对应于因子的水平(离散分裂),而中断对应于截止(连续分裂)。

sp_o <- partysplit(1L, index = 1:3)
sp_h <- partysplit(3L, breaks = 75)
sp_w <- partysplit(4L, index = 1:2)

将决策纳入节点:

pn <- partynode(1L, split = sp_o, kids = list(
  partynode(2L, split = sp_h, kids = list(
  partynode(3L, info = "yes"),
  partynode(4L, info = "no"))),
  partynode(5L, info = "yes"),
  partynode(6L, split = sp_w, kids = list(
  partynode(7L, info = "yes"),
  partynode(8L, info = "no")))))

将数据拟合到树:

t2 <- party(pn,
  data = WeatherPlay,
  fitted = data.frame(
    "(fitted)" = fitted_node(pn, data = WeatherPlay),
    "(response)" = WeatherPlay$play, # response variable
  check.names = FALSE),
  terms = terms(play ~ ., data = WeatherPlay),
  )

t3 <- as.constparty(t2)
plot(t3)

来源:http://cran.r-project.org/web/packages/partykit/vignettes/partykit.pdf

enter image description here