我使用随机森林来预测类别。现在,我正在尝试绘制每个班级的变量重要性。我使用了下面的代码,但它并没有为我提供 varImp 类,而是为我提供了整个模型。有人可以帮帮我吗?
谢谢。
odFit = train(x = df_5[,-22],
y = df_5$`kpres$cluster`,
ntree=20,method="rf",metric = "Accuracy",trControl = control,tuneGrid = tunegrid
)
odFit
varImp(odFit)
只需在
importance=TRUE
函数中添加train
,这与importance(odFit)
包中的randomForest
相同。
这里有一个可重现的例子:
library(caret)
data(iris)
control <- trainControl(method = "cv",10)
tunegrid <- expand.grid(mtry=2:ncol(iris)-1)
odFit = train(x = iris[,-5],
y = iris$Species,
ntree=20,
trControl = control,
tuneGrid = tunegrid,
importance=T
)
odFit
varImp(odFit)
这是输出
rf variable importance
variables are sorted by maximum importance across the classes
setosa versicolor virginica
Petal.Width 57.21 73.747 100.00
Petal.Length 61.90 79.981 77.49
Sepal.Length 20.01 2.867 40.47
Sepal.Width 20.01 0.000 15.73
您可以使用
ggplot
绘制变量重要性
library(ggplot2)
vi <- varImp(odFit,scale=T)[[1]]
vi$var <-row.names(vi)
vi <- reshape2::melt(vi)
ggplot(vi,aes(value,var,col=variable))+
geom_point()+
facet_wrap(~variable)
如果您需要“每个班级”的变量重要性,则必须在随机森林的 train() 模型中定义
importance=T
;否则,它只会为您提供所有类别中的总体重要变量。除此之外,您的代码没有任何问题。这是您自己的代码的修改版本:
odFit = train(x = df_5[,-22],
y = df_5$`kpres$cluster`,
ntree=20,method="rf",metric = "Accuracy",trControl =
control,tuneGrid = tunegrid, importance=T
)
odFit
varImp(odFit)