因此,在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或不适用]
这是怎么回事?我误解了吗?
谢谢
答案 0 :(得分:1)
我的理解是,这与选择mean_sample
的{{1}}参数有关。默认选项将NA替换为根为x1的最大子树的深度。详细信息如下。
此论点min_depth_interactions
的作用是什么?它指定如何处理不存在感兴趣的交互作用的树木。共有三个选项:
相关树。这仅考虑存在感兴趣的交互作用的树木。在您的示例中,这为互动mean_sample
的{{1}}提供了NA,这就是您要寻找的行为。
mean_min_depth
所有树。 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"
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