【问题标题】:Minimal depth interaction from randomForestExplainer package来自 randomForestExplainer 包的最小深度交互
【发布时间】:2019-06-19 20:04:36
【问题描述】:

因此,当在 R 中使用 randomForestExplainer 包的最小深度交互功能时,我会得到一些难以解释的结果。

我模拟了一些数据 (x1, x2,..., x5),其中 x1 是二进制的,x2-x5 是连续的。在我的模型中,没有交互。

我使用 randomForest 包创建一个随机森林,然后通过 randomForestExplainer 包运行它。

这是我用来模拟数据和随机森林的代码:

library(randomForest)
library(randomForestExplainer)

n <- 100
p <- 4

# Create data:
xrandom <- matrix(rnorm(n*p)+5, nrow=n)
colnames(xrandom)<- paste0("x",2:5)
d <- data.frame(xrandom)
d$x1 <- factor(sample(1:2, n, replace=T))

# Equation:
y <- d$x2 + rnorm(n)/5

y[d$x1==1] <- y[d$x1==1]+5
d$y <- y

# Random Forest:
fr <- randomForest(y ~ ., data=d,localImp=T)

# Random Forest Explainer:
interactions_frame <- min_depth_interactions(fr, names(d)[-6])
head(interactions_frame, 2)

这会产生以下内容:

   variable    root_variable mean_min_depth occurrences interaction
1       x1            x1       4.670732           0       x1:x1
2       x1            x2       2.606190         221       x2:x1
  uncond_mean_min_depth
1              1.703252
2              1.703252

所以,我的问题是,如果 x1:x1 出现 0 次(这是预期的),那么它怎么会有 mean_min_depth? 当然,如果它有 0 次出现,那么它不可能有最小深度吗? [或者更确切地说,最小深度 = 0 或 NA]

这里发生了什么?我是不是误解了什么?

谢谢

【问题讨论】:

    标签: r random-forest interaction


    【解决方案1】:

    我的理解是这与min_depth_interactionsmean_sample 参数的选择有关。默认选择将 NA 替换为根为 x1 的最大子树的深度。详情如下。

    mean_sample 这个论点是为了什么?它指定了如何处理不存在感兴趣的交互的树。共有三个选项:

    1. 相关树。这仅考虑存在感兴趣的交互的树。在您的示例中,这为 mean_min_depth 的交互 x1:x1 提供了 NA,这是您正在寻找的行为。

      interactions_frame <- min_depth_interactions(fr, names(d)[-6], mean_sample = "relevant_trees")
      head(interactions_frame, 2)
        variable root_variable mean_min_depth occurrences interaction uncond_mean_min_depth
      1       x1            x1             NA           0       x1:x1              1.947475
      2       x1            x2       1.426606         218       x2:x1              1.947475
      
    2. 所有树。相关树有一个主要问题,即对于只出现在少数树中的交互,采用条件最小深度的平均值忽略了这种交互并不那么重要的事实。在这种情况下,小的平均条件最小深度并不意味着交互很重要。为了解决这个问题,指定mean_sample = "all_trees" 将感兴趣的交互的条件最小深度替换为根变量的最大子树的平均深度。基本上,如果我们正在查看 x1:x2 的交互,它表示对于没有这种交互的树,给它一个根为 x1 的最深树的值。这为交互x1:x2mean_min_depth 提供了一个(希望很大的)数值,从而使其不那么重要。

      interactions_frame <- min_depth_interactions(fr, names(d)[-6], mean_sample = "all_trees")
      head(interactions_frame, 2)
        variable root_variable mean_min_depth occurrences interaction uncond_mean_min_depth
      1       x1            x1       4.787879           0       x1:x1               1.97568
      2       x1            x2       3.654522         218       x2:x1               1.97568
      
    3. top_trees。现在这是mean_sample 的默认选择。我的理解是它类似于all_trees,但试图降低替换缺失值的贡献。动机是all_trees 拉动mean_min_depth 接近相同的值,当有很多参数但没有足够的观察,即浅树。为了减少替换缺失值的贡献,top_trees 仅计算n 树子集的平均条件最小深度,其中n 是存在与指定根的任何交互的树的数量。假设在您的示例中,在这 500 棵树中,只有 300 棵树有任何交互 x1:whatever,那么我们在填写 x1:x1 的值时只考虑这 300 棵树。因为这种交互发生了 0 次,用相同的值替换 500 个 NA 与替换 300 个 NA 不会影响均值,因此它是相同的值 4.787879。 (我们的结果略有不同,我认为这与种子值有关)。

      interactions_frame <- min_depth_interactions(fr, names(d)[-6], mean_sample = "top_trees")
      head(interactions_frame, 2)
        variable root_variable mean_min_depth occurrences interaction uncond_mean_min_depth
        variable root_variable mean_min_depth occurrences interaction uncond_mean_min_depth
      1       x1            x1       4.787879           0       x1:x1              1.947475
      2       x1            x2       2.951051         218       x2:x1              1.947475
      

    这个答案是基于我对包作者论文的理解:https://rawgit.com/geneticsMiNIng/BlackBoxOpener/master/randomForestExplainer_Master_thesis.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-26
      • 2014-08-07
      • 1970-01-01
      • 2014-12-04
      • 2021-07-10
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多