【问题标题】:Can I manually create an RWeka decision (Recursive Partitioning) tree?我可以手动创建 RWeka 决策(递归分区)树吗?
【发布时间】:2015-09-04 21:31:38
【问题描述】:

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

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

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

先谢谢你了。

【问题讨论】:

    标签: r weka decision-tree


    【解决方案1】:

    RWeka 包本身无法做到这一点。但是,RWeka 使用 partykit 包来显示可以做你想做的事情的树。查看vignette(“partykit“, package = “partykit“),如何使用预先指定的partysplits 构造递归partynode 对象,然后将它们转换为constparty。小插图为此提供了一个动手示例。

    【讨论】:

    • 感谢 Achim,这正是我想要的!
    • 刚刚在下面贴了一些示例代码,这是一个不错的包。
    • 你知道如何将概率图变成条形图吗?我正在尝试可视化标签严重不平衡的数据,并且它正在扭曲比例。
    • 该图实际上是一个堆积条形图(不是“概率”图),它是使用面板函数node_barplot() 绘制的,有关更多详细信息,请参阅?node_barplot。要使用并排条形图,请使用plot(t3, tp_args = list(beside = TRUE))。如果您愿意,您还可以定义自己的面板功能。
    【解决方案2】:

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

    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
    ...
    

    初始化决策: 整数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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2012-10-18
      • 2021-03-17
      • 2019-07-21
      • 2019-06-14
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多