R tidymodels / VIP 变量重要性确定

时间:2021-06-04 08:11:06

标签: r random-forest tidymodels vip

通过 tidymodels 和 R 中的 vip 包,我计算了变量重要性。代码明智它看起来像这样:

rf_vi_fit %>%
pull_workflow_fit() %>%
vip(geom = "point") + 
labs(title = "Random forest variable importance") 

视觉上看起来像这样:

Random forest variable importance

然而,变量重要性实际上意味着什么?变量重要性可以基于多个指标,例如 R 平方的增益或基尼损失,但我不确定来自 vip 的变量重要性基于何处。我的其他预测值的可变重要性约为 3 到 4,而不是该模型中的 0.005。

我在 vip() 文档中也找不到变量重要性的依据。

1 个答案:

答案 0 :(得分:2)

您查询的答案在 vip 文档 https://cran.r-project.org/web/packages/vip/vip.pdf 的各个部分。

vip() 函数是 vi() 的包装器,用于绘制变量重要性分数。在 vip() 文档中,... 参数是“要传递给 vi() 的其他可选参数”。

vi() 函数中,有一个名为 method 的参数。

<块引用>

method = c("model", "firm", "permute", "shap")
指定要计算的变量重要性 (VI) 类型的字符串。当前选项是:
“model”(默认),用于特定于模型的 VI 分数(有关详细信息,请参阅 vi_model())。
“firm”,用于基于方差的 VI 分数(参见 vi_firm() 详情)。
“permute”,用于基于排列的 VI 分数(有关详细信息,请参阅 vi_permute)。
“shap”,用于基于 Shapley 的 VI 分数。
有关基于方差的方法的更多详细信息,请参阅 Greenwell 等人。 (2018) 和 Scholbeck 等人。 (2019)。

然后,如果您查看 vi_models() 的文档,它会详细描述每种类型模型的特定于模型的 VI 分数。以下是描述随机森林模型特定重要性的摘录。

<块引用>

随机森林通常提供两种不同重要性的度量。
第一个度量是通过置换袋外 (OOB) 数据计算得出的:对于每棵树,记录数据 OOB 部分的预测误差(分类错误率和回归 MSE)。然后在排列每个预测变量后做同样的事情。然后将两者之间的差异在森林中的所有树上取平均值,并通过差异的标准偏差进行归一化。如果变量的差异的标准差等于 0,则不进行除法(但在这种情况下,平均值几乎总是等于 0)。有关详细信息,请参阅重要性,包括可以通过 ... 参数传递的其他参数。
第二个度量是对变量进行拆分后节点杂质的总减少量,对所有树求平均值。对于分类,节点杂质是通过基尼指数来衡量的。对于回归,它是通过残差平方和来衡量的。详情请参阅重要性。