来自randomForestExplainer包的最小深度交互

时间:2019-06-19 20:04:36

标签: r random-forest interaction

因此,在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或不适用]

这是怎么回事?我误解了吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我的理解是,这与选择mean_sample的{​​{1}}参数有关。默认选项将NA替换为根为x1的最大子树的深度。详细信息如下。

此论点min_depth_interactions的作用是什么?它指定如何处理不存在感兴趣的交互作用的树木。共有三个选项:

  1. 相关树。这仅考虑存在感兴趣的交互作用的树木。在您的示例中,这为互动mean_sample的{​​{1}}提供了NA,这就是您要寻找的行为。

    mean_min_depth
  2. 所有树。 related_trees存在一个主要问题,即对于仅出现在少量树中的交互,采用条件最小深度的平均值会忽略这种交互并不那么重要的事实。在这种情况下,较小的平均条件最小深度并不意味着交互是重要的。为了解决这个问题,指定x1:x1用根变量的最大子树的平均深度替换感兴趣的交互的条件最小深度。基本上,如果我们查看x1:x2的交互作用,则表示对于不存在这种交互作用的树,请为其提供根为x1的最深树的值。这为交互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 的{​​{1}}提供了一个(非常大的)数值,从而使其重要性下降。

    mean_sample = "all_trees"
  3. top_trees。现在,这是mean_min_depth的默认选择。我的理解是,它与x1:x2类似,但是它试图降低替换缺失值的贡献。动机是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 mean_sample拉到all_trees接近相同的值,但有很多参数但没有足够的观测值,即浅树。为了减少替换缺失值的作用,all_trees仅计算mean_min_depth树的子集上的平均条件最小深度,其中top_trees是与指定根进行任何交互的树数当下。假设在您的示例中,在这500棵树中,只有300棵树具有任何交互x1:无论如何,那么我们在填充n的值时只考虑这300棵树。因为此交互的发生为0,所以用相同的值替换500个NA与替换300个NA不会影响均值,因此它的值是4.787879。 (我们的结果之间存在细微的差异,我认为这与种子值有关。)

    n

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