如何解释通过 randomForestSRC::vimp 生成的变量重要性图?
How to interpret the variable importance plot produced via randomForestSRC::vimp?
这是一个与此处提供的答案直接相关的问题:
总而言之,问题是关于为多标签分类问题生成变量重要性图。我正在处理另一个人提供的代码来生成 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 是什么意思。我阅读了包文档,但仍然无法弄明白。
这种区分(真、假、全部)是如何工作的?
在该示例中,您有 14 个可能的标签。如果您查看数据:
head(yeast)
label1 label2 label3 label4 label5 label6 label7 label8 label9 label10
1 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
3 FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
5 TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
6 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
对于每个标签,例如 label2,有两个 class,TRUE / FALSE。因此,在该图中,在该图中,all 是所有样本的总体错误率或预测错误的比例。 TRUE / FALSE 分别用于 TRUE / FALSE 标签。所以从这个图中,你可以看到 TRUE 的错误更高,这意味着模型在正确预测 TRUE 方面存在问题。
我们可以通过查看 oob 预测标签来检查这一点:
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 标签(第 2 行),614/(614+424) = 0.5915222 是错误的。这大致就是您在图中看到的,TRUE 标签的错误率为 ~ 0.6。
至于第二个变量重要性图,它是沿着同一条线,整体的变量重要性,或者TRUE/FALSE class,你可以这样看:
par(mfrow=c(1,3))
for(i in colnames(mat)){barplot(mat[,i],horiz=TRUE,las=2)}
这是一个与此处提供的答案直接相关的问题:
总而言之,问题是关于为多标签分类问题生成变量重要性图。我正在处理另一个人提供的代码来生成 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 是什么意思。我阅读了包文档,但仍然无法弄明白。
这种区分(真、假、全部)是如何工作的?
在该示例中,您有 14 个可能的标签。如果您查看数据:
head(yeast)
label1 label2 label3 label4 label5 label6 label7 label8 label9 label10
1 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
3 FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
5 TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
6 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
对于每个标签,例如 label2,有两个 class,TRUE / FALSE。因此,在该图中,在该图中,all 是所有样本的总体错误率或预测错误的比例。 TRUE / FALSE 分别用于 TRUE / FALSE 标签。所以从这个图中,你可以看到 TRUE 的错误更高,这意味着模型在正确预测 TRUE 方面存在问题。
我们可以通过查看 oob 预测标签来检查这一点:
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 标签(第 2 行),614/(614+424) = 0.5915222 是错误的。这大致就是您在图中看到的,TRUE 标签的错误率为 ~ 0.6。
至于第二个变量重要性图,它是沿着同一条线,整体的变量重要性,或者TRUE/FALSE class,你可以这样看:
par(mfrow=c(1,3))
for(i in colnames(mat)){barplot(mat[,i],horiz=TRUE,las=2)}