派对与随机森林中的可变重要性

机器算法验证 随机森林 派对
2022-03-16 05:14:38

我从 cforest 和 randomForest 在变量重要性方面得到完全不同的结果(平均准确性降低):

require(randomForest)
require(party)
require(RCurl)

x <- getURL("https://raw.githubusercontent.com/mguzmann/r-funcs/master/data/tempData.csv")

tempData <- read.csv(text = x, quote="\"", row.names=1)

tempData$resp = as.factor(as.numeric(tempData$resp))
tempData$a = as.factor(as.numeric(tempData$a))
tempData$b = as.factor(as.numeric(tempData$b))
tempData$c = as.factor(as.numeric(tempData$c))
tempData$d = as.factor(as.numeric(tempData$d))

tempData.rf = randomForest(resp ~., tempData, importance=T)
importance(tempData.rf)

(简化输出)

平均下降准确度

a 10.18511
b 15.88859
c 27.13357
d 15.36184

tempData.cf = cforest(resp ~., tempData,
        controls=cforest_unbiased(ntree=500, mtry=4))
varimp(tempData.cf)

平均下降准确度

a 0.02219259 b 0.02903704 c 0.06500741 d 0.03765926

我应该如何比较这些数字并解释它们的差异?为什么会这样?

2个回答

实际上,对于 a 和 c,这两个重要性是一致的。这里有一个关于变量重要性的很好的教程这些是在cforest.

另外,我认为这些值的绝对值是不同的,因为如果您检查randomForest包的文档,它会说:

importance(x, type=NULL, class=NULL, scale=TRUE, ...)

这意味着默认情况下,特征的重要性是标准化的:xjVI(xj)σ^/ntree

在哪里

VI(xj)=tntreeVI(t)(xj)ntree

传统随机森林在评估变量重要性时使用“基尼增益”分裂标准,该标准偏向于具有多个级别/类别的因子变量。简而言之,cforest 函数不是从 CART 树创建随机森林,而是从基于条件推断的无偏分类树创建随机森林,这在涉及多因素变量时提供了更加稳健的结果,特别是当该函数与不替换的子采样一起使用时。这是一篇很好的论文,更深入地解释了这些差异:

随机森林变量重要性度量中的偏差:插图、来源和解决方案斯特罗布尔等人。(2007)