这个问题直接与这里提供的答案相关:MLR随机森林多标签获取特征重要性
总结来说,这个问题是关于为多标签分类问题生成变量重要性图。我正在复制另一个人提供的代码来生成vimp图:
library(mlr)yeast = getTaskData(yeast.task)labels = colnames(yeast)[1:14]yeast.task = makeMultilabelTask(id = "multi", data = yeast, target = labels)lrn.rfsrc = makeLearner("multilabel.randomForestSRC")mod2 = train(lrn.rfsrc, yeast.task)vi =randomForestSRC::vimp(mod2$learner.model)plot(vi,m.target ="label2")
我不确定randomForestSRC::vimp图中的TRUE、FALSE和All是什么意思。我查阅了包文档,仍然无法理解。
这些区别(TRUE、FALSE、All)是如何工作的?
回答:
在那个例子中,你有14个可能的标签。如果你查看数据:
head(yeast) label1 label2 label3 label4 label5 label6 label7 label8 label9 label101 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE2 FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE3 FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE4 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE5 TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE6 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
对于每个标签,例如label2,有两个类别,TRUE/FALSE。所以在这个图中,All是所有样本预测错误的总体错误率或比例。TRUE/FALSE是针对TRUE/FALSE标签分别计算的。所以从这个图中,你可以看到TRUE的错误率更高,意味着模型在正确预测TRUE时有问题。
我们可以通过查看袋外预测标签来验证这一点:
oob_labels = c(TRUE,FALSE)[max.col(vi$classOutput$label2$predicted.oob)]table(yeast$label2, oob_labels) oob_labels FALSE TRUE FALSE 1175 204 TRUE 614 424
你可以看到对于TRUE标签(第二行),错误率为614/(614+424) = 0.5915222。这大致是你在这个图中看到的,TRUE标签的错误率大约是0.6。
至于第二个变量重要性图,它是沿着同样的思路,变量重要性针对整体,或者TRUE/FALSE类别,你可以这样查看:
par(mfrow=c(1,3))for(i in colnames(mat)){barplot(mat[,i],horiz=TRUE,las=2)}