支持向量机中没有关于变量重要性的信息.所以,我正在使用变量的排列来生成变量重要性图,借助这个answer,比如

library(vip)
library(MASS)
library(tidymodels)

data(Boston, package = "MASS")
df <- Boston

#Split the data into train and test set
set.seed(7)
splits <- initial_split(df)
train <- training(splits)
test <- testing(splits)


#Preprocess with recipe
rec <- recipe(medv~.,data=train) %>%
  step_normalize(all_predictors()) 

svm_spec <- svm_rbf(margin = 0.0937, cost = 26.7, rbf_sigma = 0.0208) %>%
  set_engine("kernlab") %>%
  set_mode("regression")


#Putting into workflow
svr_fit <- workflow() %>%
  add_recipe(rec) %>%
  add_model(svm_spec) %>% 
  fit(data = train)

svr_fit %>%
  pull_workflow_fit() %>%
  vip(method = "permute", nsim = 5,
      target = "medv", metric = "rmse",
      pred_wrapper = kernlab::predict, train = train)

但它返回给我以下错误:

错误metric_fun(): !estimate应该是一个数字向量,而不是一个数字矩阵.

与此同时,pull_workflow_fit也是不受欢迎的.应该用什么来代替pull_workflow_fit

推荐答案

必须更新DR pred_wrapper以返回向量,而不是数据帧. 不应该为了获得有意义的结果而对变量进行标准化. pull_workflow_fit被替换为extract_fit_parsnip

library(vip)
#> 
#> Attaching package: 'vip'
#> The following object is masked from 'package:utils':
#> 
#>     vi
library(MASS)
library(tidymodels)

data(Boston, package = "MASS")
df <- Boston

# Split the data into train and test set
set.seed(7)
splits <- initial_split(df)
train <- training(splits)
test <- testing(splits)


# Preprocess with recipe
rec <- recipe(
  formula = medv ~ .,
  data = train
) 

svm_spec <- svm_rbf(margin = 0.0937, cost = 20, rbf_sigma = 0.0208) %>%
  set_engine("kernlab") %>%
  set_mode("regression")


# Putting into workflow
svr_fit <- workflow() %>%
  add_recipe(rec) %>%
  add_model(svm_spec) %>%
  fit(data = train)

svr_fit %>%
  extract_fit_parsnip() %>%
  vip(
    method = "permute", nsim = 5,
    target = "medv", metric = "rmse",
    geom = "point",
    pred_wrapper = function(object, newdata) as.vector(kernlab::predict(object, newdata)),
    train = train
  )

创建于2023-12-30,共reprex v2.0.2

R相关问答推荐

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

使用lapply的重新定位功能

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

使用tidyverse方法绑定行并从一组管道列表执行左连接

R Highcharts与两个位置关联的注释

如何编辑gMarginal背景以匹配绘图背景?

将数字转换为分钟和秒

使用较长的查询提取具有部分匹配的列表中的较短目标,

提取第一个下划线和最后一个下划线之间的任何内容,例外情况除外

将. xlsx内容显示为HTML表

在R函数中使用加号

识别连接的子网(R-igraph)

R -在先前group_by级别汇总时获取最大大小子组的计数

如何计算R glm probit中的线性预测因子?

我们如何在R中透视数据并在之后添加计算

如何使用For-R循环在向量中找到一系列数字

如何阻止围堵地理密度图?

如何在使用Alpha时让geom_curve在箭头中显示恒定透明度

TidyVerse中长度不等的列结合向量

如何使用ggsurvfit包更改风险表中的标签名称?