【问题标题】:R - data.tree aggregate along ancestors of a leaf?R - data.tree 沿着叶子的祖先聚合?
【发布时间】:2018-09-06 20:15:14
【问题描述】:

背景:假设我有一个决策树,其中包含在其节点处出现结果的概率。我需要计算每个叶子上每个最终结果的联合出现概率。

方法:我试图沿着树的每一片叶子的祖先聚合,在 R 中使用data.tree

问题:我是 data.tree 的初学者,完全不知道这是否可行。

这是一个示例(使用 sum 而不是 prod 作为聚合,因为手动计算更容易一些):

library(data.tree)
set.seed(123)
# Create a tree
thetree <- CreateRegularTree(height = 3, branchingFactor = 2, parent = Node$new("1"))
thetree$Set(p = 1:thetree$totalCount/10)
print(thetree, "p")
#       levelName   p
# 1 1             0.1
# 2  ¦--1.1       0.2
# 3  ¦   ¦--1.1.1 0.3
# 4  ¦   °--1.1.2 0.4
# 5  °--1.2       0.5
# 6      ¦--1.2.1 0.6
# 7      °--1.2.2 0.7

我尝试了聚合函数

# But this returns aggregations across all children on each level
thetree$Do(function(x) x$result <- Aggregate(x, "p", sum))
print(thetree, "p", "result")

#       levelName   p result
# 1 1             0.1    0.7
# 2  ¦--1.1       0.2    0.7
# 3  ¦   ¦--1.1.1 0.3    0.3
# 4  ¦   °--1.1.2 0.4    0.4
# 5  °--1.2       0.5    1.3
# 6      ¦--1.2.1 0.6    0.6
# 7      °--1.2.2 0.7    0.7

我也尝试了traversal = "ancestor"这个论点,但没有成功。

我想要的结果涉及沿从祖先到每个叶子的每条路径进行聚合,例如 - 对于叶子 1.1.1。 -- 例如 0.3 + 0.2 + 0.1。

# Desired result
#       levelName   p result
# 1 1             0.1    NA
# 2  ¦--1.1       0.2    0.3
# 3  ¦   ¦--1.1.1 0.3    0.6
# 4  ¦   °--1.1.2 0.4    0.7
# 5  °--1.2       0.5    0.6
# 6      ¦--1.2.1 0.6    1.2
# 7      °--1.2.2 0.7    1.3

【问题讨论】:

    标签: r tree aggregate


    【解决方案1】:

    为此,Do 就派上用场了:

    thetree$result <- thetree$p
    traversal <- Traverse(thetree, filterFun = isNotRoot)
    Do(traversal, function(node) node$result <- node$parent$result + node$p)
    

    这会得到想要的结果:

    print(thetree, "p", "result")
          levelName   p result
    1 1             0.1    0.1
    2  ¦--1.1       0.2    0.3
    3  ¦   ¦--1.1.1 0.3    0.6
    4  ¦   °--1.1.2 0.4    0.7
    5  °--1.2       0.5    0.6
    6      ¦--1.2.1 0.6    1.2
    7      °--1.2.2 0.7    1.3
    

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 2018-02-17
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多