我有以下代码,它基本上尝试使用randomForest从Species
数据预测iris
。我真正想要的是找到解释物种分类的最佳特征(变量)。我发现包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")
代码的结果产生了这个图:
根据情节,解释为什么Petal.Length和Petal.Width是最佳因素的关键因素是这些(解释基于vignette):
mean_min_depth
- 表示以参数mean_sample指定的三种方式之一计算的最小深度,times_a_root
- Xj用于分割根节点的树的总数(即,整个样本根据Xj的值分为两个),no_of_nodes
- 使用Xj进行拆分的节点总数(如果树浅,通常等于no_of_trees),我并不完全清楚为什么高times_a_root
和no_of_nodes
更好?低mean_min_depth
更好?
有什么直观的解释?
vignette信息无效。
答案 0 :(得分:4)
您希望统计模型或衡量指标能够在&#34; power&#34;之间取得平衡。和&#34;简约&#34;。 randomForest在内部设计用于惩罚,作为实现简约的统计策略。此外,在任何给定样本中选择的变量数量将小于预测变量的总数。当hte预测变量数超过数据集中的个案(行)数时,这允许建模。早期拆分或分类规则可以相对容易地应用,但随后的拆分变得越来越难以满足有效性标准。 &#34;电源及#34;是能够正确分类不在子样本中的项目,代理,所谓的OOB或&#34; out-of-bag&#34;物品被使用。 randomForest策略是多次这样做,以建立一套有代表性的规则,根据假设,即袋外样本将是“宇宙”的公平表示,对项目进行分类。从中产生了整个数据集。
times_a_root
属于衡量&#34;相对权力&#34;与其竞争对手相比变量#34; times_a_root
统计量衡量变量的次数&#34;在顶部&#34;决策树的一部分,即在选择分割标准的过程中首先选择它的可能性。 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
作为最重要的变量被选为最高变量。 500个中约有75个有Sepal.Length
,而只有大约8个或9个有Sepal.Width
(...它是对数刻度。)对于虹膜数据集,子样本至少会被忽略每个子样本中的一个变量,因此times_a_root
的最大可能值将小于500.在这种情况下,分数为200非常好,我们可以看到这两个变量具有相当的解释能力。
no_of_nodes
统计信息总计了在其任何节点中具有该变量的树的总数,记住节点的数量将受到惩罚规则的约束。