如何更改 R 中随机森林的分割标准?

Posted

技术标签:

【中文标题】如何更改 R 中随机森林的分割标准?【英文标题】:How can I change the split criterion for random forest in R? 【发布时间】:2020-03-29 01:39:23 【问题描述】:

我正在使用包 randomForest 在 R 中运行随机森林。

我有两个问题:

    当使用这个包时,默认标准是基尼的平均减少是否正确?

    我用varImpPlot 绘制变量重要性并获得两个重要性度量:Mean Decrease Accuracy 和 Mean Decrease Gini;如何使用前者实际拆分节点?

【问题讨论】:

固定编号列表和部分文字。 欢迎来到 SO。使用reproducible examples 帮助您更容易。 【参考方案1】:

是的,计算分类树拆分的标准方法是降低基尼指数。另一种方法是使用基于熵的方法,但结果相似,并且公式中包含对数,因此通常速度较慢。

使用降低准确性的拆分通常不在包中实现(它不在 R 的 randomForest 和 ranger 中,也不在 python 上的 Sklearn 中),因为 id 不尊重一些基本属性作为损失函数并直接给出不好的结果。

如果需要,您可以在 https://arxiv.org/pdf/1407.7502.pdf 找到一些详细信息,大约在第 42-45 页左右

【讨论】:

谢谢大卫!也许这是一个微不足道的问题,但为什么计算精度下降而不是实现呢? @Matilde 通常通过在使用给定的列置换预测数据后查看总准确度的变化来实现降低准确度,它给出了更容易理解的重要性“分数”。 Gini 的平均下降是通过将拆分给定变量时获得的所有 Gini 下降求和来完成的,它是一个不太可靠的重要性分数。 Gini 必须用于拆分,而 Accuracy(或通过排列重要性获得的任何分数)最适合用于重要性。关于这个话题,我真的建议这个链接:explained.ai/rf-importance/#intro【参考方案2】:

以下代码(来自 Titanic 数据集示例)显示了如何在 Gini 和 Entropy 之间切换:

fit=rpart(Survived ~ Class + Age + Gender, data = TitanicTrain, control = 
            rpart.control(split='Entroy', cp=0.05))

【讨论】:

这是针对 rpart 包中的一棵树,而不是针对随机森林。这与回答这个问题无关。

以上是关于如何更改 R 中随机森林的分割标准?的主要内容,如果未能解决你的问题,请参考以下文章

随机森林树生长算法

使用 H2O 在 R 中平衡随机森林

请教在R语言里面如何计算随机森林模型的p值?

如何在 R 中执行随机森林/交叉验证

如何绘制从使用 R 中的“caret”包创建的随机森林中选择的树

r语言随机森林结果规则怎么显示