Kyl*_*ian 2 r random-forest tidymodels vip
通过 tidymodels 和 R 中的 vip 包,我计算了变量重要性。就代码而言,它看起来像这样:
rf_vi_fit %>%
pull_workflow_fit() %>%
vip(geom = "point") +
labs(title = "Random forest variable importance")
Run Code Online (Sandbox Code Playgroud)
从视觉上看,它看起来像这样:
然而,变量重要性实际上意味着什么?变量重要性可以基于多个指标,例如 R 平方增益或基尼损失,但我不确定 vip 的变量重要性是基于哪里。我的其他预测具有 3 到 4 左右的可变重要性值,而不是像本模型中的 0.005。
我在 vip() 文档中也找不到变量重要性的依据。
您询问的答案位于 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)。有关详细信息,请参阅重要性,包括可以通过 ... 参数传递的其他参数。
第二个衡量标准是变量分裂导致的节点杂质的总减少,对所有树进行平均。对于分类,节点杂质通过基尼指数来衡量。对于回归,它是通过残差平方和来衡量的。详细信息请参见重要性。