如何理解RandomForestExplainer输出(R软件包)

12
我有以下代码,基本上是使用randomForest尝试预测iris数据中的Species。我真正感兴趣的是找出最好的特征(变量),以解释物种分类。我发现randomForestExplainer包是最适合这个目的的。
library(randomForest)
library(randomForestExplainer)
forest <- randomForest::randomForest(Species ~ ., data = iris, localImp = TRUE)
importance_frame <- randomForestExplainer::measure_importance(forest)
randomForestExplainer::plot_multi_way_importance(importance_frame, size_measure = "no_of_nodes")

代码的结果生成了这个图表:

enter image description here

基于这个情节,解释Petal.Length和Petal.Width为什么是最好的因素的关键因素是这些(解释基于vignette):

  1. mean_min_depth - 在参数mean_sample指定的三种方式之一中计算的平均最小深度,
  2. times_a_root - 使用Xj分割根节点的树的总数(即,基于Xj的值将整个样本分成两部分),
  3. no_of_nodes - 使用Xj进行分割的节点的总数(如果树较浅,则通常等于no_of_trees),

我不完全清楚为什么高times_a_rootno_of_nodes更好?而低mean_min_depth更好?

这是什么直观的解释呢?

vignette信息并没有帮助。


也许可以向开发者提出一个 github 问题?他的硕士论文就是关于这个的。 - phiver
1个回答

4
您希望一个统计模型或度量能在“功效”和“简洁性”之间保持平衡。randomForest 内部设计了惩罚作为其实现简洁性的统计策略。此外,在任何给定样本中选择的变量数量将少于预测变量的总数。这使得当预测变量超过数据集中的案例(行)数时,可以建立模型。早期的分裂或分类规则可以相对容易地应用,但随后的分裂越来越难以满足有效性的标准。“功效”是正确分类未包含在子样本中的项目的能力,其中使用了代理——所谓的 OOB 或“袋外”项目。randomForest 的策略是多次执行此操作,以建立一组代表性规则,根据假设,袋外样本将是整个数据集产生的“宇宙”的公正代表。 times_a_root 将属于衡量变量与其“竞争者”相比的“相对功效”的类别。 times_a_root 统计量测量变量在决策树中处于“顶部”的次数,即在选择分裂标准的过程中首选的可能性有多大。 no_of_node 表示在所有子样本中选择该变量作为分裂标准的次数。
?randomForest # to find the names of the object leaves
forest$ntree
[1] 500

在绘图的y轴上大约有200个数值,我们可以获得一个分母以评估它们的含义。样本回归中约有2/5使用了Petal.Length作为最重要的筛选标准,而另外2/5则将Petal.Width作为最重要的变量。大约有75个样本回归使用了Sepal.Length,而只有大约8或9个使用了Sepal.Width(因为这是对数刻度)。在鸢尾花数据集中,子样本会忽略每个子样本中至少一个变量,因此times_a_root的最大可能值将小于500。在这种情况下,得分200相当不错,我们可以看到这两个变量具有类似的解释能力。

no_of_nodes统计了所有树中任何节点都包含该变量的总数,需要记住节点数量会受到惩罚规则的限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接