如何在R中使用VIF?

我在学习使用caret进行机器学习,并且是R的新手。我原本在处理UCI银行营销响应数据,但在这里为了可复现性使用了iris数据集。

问题是我在运行car包中的vif函数时,在分类模型上遇到了错误

library(tidyverse)library(caret)library(car)iris# 为了将其转换为二分类问题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中的错误

# vifcar::vif(model_iris3)

在UseMethod(“vcov”)中出现错误:没有适用于类别为”c(‘train’, ‘train.formula’)”对象的方法’vcov’

我从这个Stack Overflow帖子中了解到可以对finalModel使用vifVariance inflation VIF for glm caret model in R

但仍然遇到错误

car::vif(model_iris3$finalModel)

在UseMethod(“vcov”)中出现错误:没有适用于类别为”gbm”对象的方法’vcov’

使用adaboostearth等时也遇到了同样的错误。

非常感谢任何帮助或建议来解决这个问题。

(更新)

最后这个方法奏效了(如果您仍然遇到错误,请查看答案中的完整解决方案):

vif分类模型不起作用,所以将因变量转换为数值,然后运行线性回归并使用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)######## 输出 ##########Sepal.Length  Sepal.Width Petal.Length  Petal.Width     4.803414     2.594389    36.246326    25.421395 

回答:

car::vif是一个需要针对每种模型类型进行调整的函数。它在链接的问题中有效是因为car::vif已经实现了对glm模型的支持。您的选择模型类型gbm不受car::vif支持。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注