如何使用 R caret 包计算每个类的变量重要性?

时间:2021-03-23 03:25:24

标签: r r-caret

当我在模型中输出变量重要性 (rf) 时,我使用了下面的代码(rfmodel_all 是我的模型)。

importance(rfmodel_all[11][[1]])
varImp(rfmodel_all)

虽然我得到了下面的结果,但每个类中变量重要性的两个值是不同的。 他们每个班级的价值观是什么意思?

importance(rfmodel_all[11][[1]])

                        F1         F2         F3        F4       F5
 dem5m_field2   10.2504042  6.9464506  3.1169946 13.394995 17.52028

 ah             -2.5141337 -3.9860137  3.1314217 11.585716 13.33464

varImp(rfmodel_all)

rf 变量重要性,

变量按类中的最大重要性排序

                    F1     F2     F3    F4     F5
 vd             72.436 98.173 54.284 91.48 100.00

 twi            10.412  8.235 22.369 92.55  82.67

如果你知道,请告诉我一些关于这种解释的参考文献。

谢谢。

1 个答案:

答案 0 :(得分:0)

varImp() 函数基本上使用 importance() 中的 randomForest() 函数并将它们从 0 缩放到 100 ,并且如您已经注意到的那样重新排列它们。要获得相同的结果,您只需执行 varImp(..,scale=FALSE) ,例如:

set.seed(111)
mdl = train(Species ~ .,data=iris,
trControl=trainControl(method="cv"),importance=TRUE)

importance(mdl$finalModel)[,1:3]
               setosa versicolor virginica
Sepal.Length  5.69594   6.452202  6.661104
Sepal.Width   4.46492   1.171534  4.245839
Petal.Length 22.52265  32.843039 27.864307
Petal.Width  22.11490  33.060450 31.897033

varImp(mdl,scale=FALSE)
rf variable importance

  variables are sorted by maximum importance across the classes
             setosa versicolor virginica
Petal.Width  22.115     33.060    31.897
Petal.Length 22.523     32.843    27.864
Sepal.Length  5.696      6.452     6.661
Sepal.Width   4.465      1.172     4.246

重要性分数基本上是通过排列和重新计算OOB样本中准确率的变化来获得的。见random forest page。它粗略地衡量了变量在正确预测每个类别方面的有用程度。