我有一个类似于鸢尾花的数据集,我的y是一个多类别因子变量。是否有办法查看method = rf
、method = treebag
和method = boost
的结果?非常感谢您的帮助。
data(iris); head(iris)iris$Species <- factor(iris$Species)set.seed(87)inTrainingSet <- createDataPartition(iris$Species, p=.80,list=0)train <- iris[inTrainingSet,]test <- iris[-inTrainingSet,]ctrl <- trainControl(method = "cv", number = 2, verboseIter = TRUE)pls <- train(Species ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width , method = "pls", data = iris, trControl = ctrl)attributes(varImp(pls))varImp(pls)$importance
回答:
你的问题涉及几个要点,如果每个模型都有内置方法来正确估计这些变量的重要性,你可以使用默认的useModel = FALSE
来运行varImp。
对于随机森林,在拟合时添加importance=TRUE
:
rf <- train(Species ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width , method = "rf", data = iris, trControl = ctrl,importance=TRUE)varImp(rf)rf variable importance variables are sorted by maximum importance across the classes setosa versicolor virginicaPetal.Length 66.94 100.00 85.40Petal.Width 63.86 92.22 89.87Sepal.Length 16.75 24.05 24.90Sepal.Width 12.75 0.00 17.49
如果模型没有针对多类别的内置方法,则使用成对的ROC曲线来推导这些重要性,详见caret页面上的具体说明:
tb <- train(Species ~ Sepal.Length+Sepal.Width+Petal.Length+Petal.Width , method = "treebag", data = iris, trControl = ctrl,importance=TRUE)varImp(tb,useModel=TRUE)treebag variable importance OverallPetal.Length 100.00Petal.Width 99.17Sepal.Length 32.23Sepal.Width 0.00 varImp(tb,useModel=FALSE)ROC curve variable importance variables are sorted by maximum importance across the classes setosa versicolor virginicaPetal.Width 100.00 100.00 100.0Petal.Length 100.00 100.00 100.0Sepal.Length 90.70 59.30 90.7Sepal.Width 54.59 54.59 0.0
你没有指定使用哪种提升树方法,但我猜你可以轻松地使用上述选项之一