如何使用 R 中的 Tidymodels 从 LM 计算重要性?
How to compute importance from a LM using Tidymodels in R?
我正在尝试使用 tidymodels
计算线性模型上的变量重要性。据我所知,vip
包用于在使用 tidymodels
时提取重要性。例如,如果我想从随机森林 tidymodels
模型中提取重要性,我会执行以下操作:
library(tidymodels)
aq <- na.omit(airquality)
model_rf <-
rand_forest(
mode = "regression"
) %>%
set_engine("ranger",
importance = "permutation"
) %>%
fit(Ozone ~ ., data = aq)
# variable importance
vip:::vi(model_rf)
这将 return 的重要性。但是,如果我使用线性模型尝试类似的操作,它会返回一个错误。例如:
# create model fit
lm_aq_model <- linear_reg() %>%
set_engine("lm")
lm_fit <- lm_aq_model %>%
fit(Ozone ~ ., data = aq)
vip:::vi(lm_aq_model, method = "permute", target = "Ozone",
metric = "rsquared", pred_wrapper = predict)
> Error in match.call(f, call = mcall) : invalid 'call' argument
我在这里做错了什么?如果我尝试:
aqLM <- lm(Ozone~., data = aq)
vip::vi(aqLM, method = "permute", target = "Ozone",
metric = "rsquared", pred_wrapper = predict)
这行得通...为什么我不能让它与 tidymodels
一起工作?
此外,这是使用 tidymodels
时实际提取重要性的首选方法吗?有没有我可以使用的通用整洁模型函数,而不是使用 vip::vi(model_fit)
?
谢谢
看来你给错了,为什么不给它合适的呢?这就是 RF 示例所做的。
vip:::vi(lm_fit, method = "permute", target = "Ozone",
metric = "rsquared", pred_wrapper = predict)
我正在尝试使用 tidymodels
计算线性模型上的变量重要性。据我所知,vip
包用于在使用 tidymodels
时提取重要性。例如,如果我想从随机森林 tidymodels
模型中提取重要性,我会执行以下操作:
library(tidymodels)
aq <- na.omit(airquality)
model_rf <-
rand_forest(
mode = "regression"
) %>%
set_engine("ranger",
importance = "permutation"
) %>%
fit(Ozone ~ ., data = aq)
# variable importance
vip:::vi(model_rf)
这将 return 的重要性。但是,如果我使用线性模型尝试类似的操作,它会返回一个错误。例如:
# create model fit
lm_aq_model <- linear_reg() %>%
set_engine("lm")
lm_fit <- lm_aq_model %>%
fit(Ozone ~ ., data = aq)
vip:::vi(lm_aq_model, method = "permute", target = "Ozone",
metric = "rsquared", pred_wrapper = predict)
> Error in match.call(f, call = mcall) : invalid 'call' argument
我在这里做错了什么?如果我尝试:
aqLM <- lm(Ozone~., data = aq)
vip::vi(aqLM, method = "permute", target = "Ozone",
metric = "rsquared", pred_wrapper = predict)
这行得通...为什么我不能让它与 tidymodels
一起工作?
此外,这是使用 tidymodels
时实际提取重要性的首选方法吗?有没有我可以使用的通用整洁模型函数,而不是使用 vip::vi(model_fit)
?
谢谢
看来你给错了,为什么不给它合适的呢?这就是 RF 示例所做的。
vip:::vi(lm_fit, method = "permute", target = "Ozone",
metric = "rsquared", pred_wrapper = predict)