多类中的变量重要性
variable importance in multiclass
我有一个像 iris 这样的数据集,我的 y 是一个多 class 因子变量。有什么方法可以看到 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
你的问题有几个要点,所以如果有一个内置方法可以为每个模型正确估计这个,你可以 运行 varImp 使用默认 useModel = FALSE
.
对于随机森林,你在拟合时添加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 virginica
Petal.Length 66.94 100.00 85.40
Petal.Width 63.86 92.22 89.87
Sepal.Length 16.75 24.05 24.90
Sepal.Width 12.75 0.00 17.49
如果模型没有针对多类的内置模型,则使用成对的 roc 曲线来推导这些重要性,请参阅 page for 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
Overall
Petal.Length 100.00
Petal.Width 99.17
Sepal.Length 32.23
Sepal.Width 0.00
varImp(tb,useModel=FALSE)
ROC curve variable importance
variables are sorted by maximum importance across the classes
setosa versicolor virginica
Petal.Width 100.00 100.00 100.0
Petal.Length 100.00 100.00 100.0
Sepal.Length 90.70 59.30 90.7
Sepal.Width 54.59 54.59 0.0
您没有指定使用哪种增强树方法,但我想您可以轻松使用上述选项之一
我有一个像 iris 这样的数据集,我的 y 是一个多 class 因子变量。有什么方法可以看到 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
你的问题有几个要点,所以如果有一个内置方法可以为每个模型正确估计这个,你可以 运行 varImp 使用默认 useModel = FALSE
.
对于随机森林,你在拟合时添加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 virginica
Petal.Length 66.94 100.00 85.40
Petal.Width 63.86 92.22 89.87
Sepal.Length 16.75 24.05 24.90
Sepal.Width 12.75 0.00 17.49
如果模型没有针对多类的内置模型,则使用成对的 roc 曲线来推导这些重要性,请参阅 page for 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
Overall
Petal.Length 100.00
Petal.Width 99.17
Sepal.Length 32.23
Sepal.Width 0.00
varImp(tb,useModel=FALSE)
ROC curve variable importance
variables are sorted by maximum importance across the classes
setosa versicolor virginica
Petal.Width 100.00 100.00 100.0
Petal.Length 100.00 100.00 100.0
Sepal.Length 90.70 59.30 90.7
Sepal.Width 54.59 54.59 0.0
您没有指定使用哪种增强树方法,但我想您可以轻松使用上述选项之一