随机森林和变量重要性错误?

机器算法验证 r 随机森林 重要性
2022-03-29 13:22:45

我不明白MeanDecreaseAccuracy 列中的rfobject$importance和之间的区别。importance(rfobject)

例子:

> data("iris")
> fit <- randomForest(Species~., data=iris, importance=TRUE)
> fit$importance
                  setosa  versicolor   virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 0.027078501 0.019418330 0.040497602           0.02898837         9.173648
Sepal.Width  0.008553449 0.001962036 0.006951771           0.00575489         2.472105
Petal.Length 0.313303381 0.291818815 0.280981959           0.29216790        41.284869
Petal.Width  0.349686983 0.318527008 0.270975757           0.31054451        46.323415
> importance(fit)
               setosa versicolor virginica MeanDecreaseAccuracy MeanDecreaseGini
Sepal.Length 1.277324   1.632586  1.758101            1.2233029         9.173648
Sepal.Width  1.007943   0.252736  1.014141            0.6293145         2.472105
Petal.Length 3.685513   4.434083  4.133621            2.5139980        41.284869
Petal.Width  3.896375   4.421567  4.385642            2.5371353        46.323415
> 

我得到不同的 MeanDecreaseAccuracy 值,但重要性变量的顺序相同(forfit$importance和 for importance(fit)):

  1. 花瓣宽度

  2. 花瓣长度

  3. 萼片长度

  4. 隔板宽度

但在其他数据集中,我有时会得到不同的顺序。有人可以解释这里发生了什么吗?这可能是一个错误吗?


编辑(回应Martin O'Leary

好的谢谢!我注意到别的东西。

看看rfcv()我注意到这条线的功能:

impvar <- (1:p)[order(all.rf$importance[, 1], decreasing = TRUE)]

使用这一行,我们选择第一列,all.rf$importance其中给出了类特定(对于第一个因素)度量的顺序,计算为仅准确度的平均下降。这并不总是与所有类别的平均准确度下降的顺序相同(MeanDecreaseAccuracy)。选择MeanDecreaseAccuracyorMeanDecreaseGini列,或者更好地使用importance()- 函数作为缩放值不是更好吗?因此,我们将依次减少按变量重要性(在所有类别中)排列的预测变量数量,而不仅仅是按第一类的变量重要性排列。

1个回答

不,这不是错误。中给出的值fit$importance未按比例缩放,而 给出的值以importance(fit)标准偏差表示(由 给出fit$importanceSD)。这通常是更有意义的衡量标准。如果你想要“原始”值,你可以使用importance(fit, scale=FALSE).

一般来说,当提供了一个提取器函数时,依赖一个 fit 对象的内部细节是一个非常糟糕的主意。无法保证内容fit$importance- 它们可能会在版本之间发生巨大变化,恕不另行通知。提供时,您应该始终使用提取器功能。


编辑:是的,该行rfcv()看起来确实像一个错误,或者至少是意外行为。这实际上是一个很好的例子,说明了为什么你不应该依赖fit$importance. 如果适合回归森林,则 的第一列fit$importance%IncMSE,相当于importance(fit, type=1)但是,这不适用于分类情况,在这种情况下,每个因子级别都有额外的列。