【发布时间】:2021-02-11 23:12:33
【问题描述】:
我是 R 新手,正在使用 caret 学习机器学习。我正在研究 UCI 银行营销响应数据,但这里使用了 iris 数据以实现可重复性。
问题是我在classification 模型上从car package 运行vif 得到error。
library(tidyverse)
library(caret)
library(car)
iris
# to make it binary classification
iris_train <- iris %>% filter(Species %in% c("setosa","versicolor"))
iris_train$Species <- factor(iris_train$Species)
创建模型
model_iris3 <- train(Species ~ .,
data = iris_train,
method = "gbm",
verbose = FALSE
# tuneLength = 5,
# metric = "Spec",
# trControl = fitCtrl
)
vif 中的错误
# vif
car::vif(model_iris3)
UseMethod("vcov") 中的错误:没有适用于 'vcov' 的方法应用于“c('train', 'train.formula')”类的对象
我通过这篇 SO 帖子了解了如何使用 finalModel 进行 vif:Variance inflation VIF for glm caret model in R
但还是报错
car::vif(model_iris3$finalModel)
UseMethod("vcov") 中的错误:没有适用于 'vcov' 的方法应用于“gbm”类的对象
adaboost、earth 等出现同样的错误。
感谢任何解决此问题的帮助或建议。
(更新)
终于成功了(如果您仍然遇到错误,请参阅Answers 中的完整解决方案):
vif 不适用于classification 模型,因此将dependent 变量转换为numeric 并在其上运行linear regression,然后运行vif
model_iris4 <- train(as.numeric(Species) ~ .,
data = iris_train,
method = "lm",
verbose = FALSE
# tuneLength = 5,
# metric = "Spec",
# trControl = fitCtrl
)
car::vif(model_iris4$finalModel)
######## output ##########
Sepal.Length Sepal.Width Petal.Length Petal.Width
4.803414 2.594389 36.246326 25.421395
【问题讨论】:
标签: r machine-learning classification r-caret multicollinearity