R - mlr:是否有一种简单的方法可以在嵌套重采样(空间)中获得调整后的支持向量机模型的可变重要性?

2024-01-27

我正在尝试获取可变重要性对于a的所有预测变量(或变量,或特征)调优支持向量机 (SVM)模型使用e1071::svm通过mlr- 封装在R。但我不确定我的评估是否正确。好吧,一开始的想法是:

为了获得诚实调整的 svm 模型,我遵循嵌套重采样教程 https://mlr-org.github.io/mlr-tutorial/devel/html/nested_resampling/index.html使用空间 n 重交叉验证(SpRepCV)在外循环和空间交叉验证(SpCV)在内循环中。作为调整参数gamma and cost在随机网格搜索中进行调整。 作为所有预测变量的变量重要性评估,我想使用permutation.importance,即与描述 https://mlr-org.github.io/mlr-tutorial/devel/html/filter_methods/index.html,基本上是特征排列和未排列预测之间的聚合差异。

In mlr, 有一些过滤函数 https://mlr-org.github.io/mlr-tutorial/devel/html/feature_selection/index.html获得变量重要性,但同时在基于用户特定选择输入(阈值或变量数量)的模型拟合之前创建子集。 - 但是,我想检索每个拟合模型的所有变量的变量重要性。 (我知道学习者作为random forest有重要评价“包容”)

现在,我正在使用mlr::generateFeatureImportanceData https://www.rdocumentation.org/packages/mlr/versions/2.10/topics/generateFeatureImportanceData in the extract-重采样中的参数,看起来真的很尴尬。所以我想问一下,有没有更简单的方法呢?

这里有一个使用的例子mlr-开发版本:

## initialize libraries
# devtools::install_github("mlr-org/mlr) # using developper version of mlr
if(!require("pacman")) install.packages("pacman")
pacman::p_load("mlr", "ParamHelpers", "e1071", "parallelMap")


## create tuning setting
svm.ps <- ParamHelpers::makeParamSet(
  ParamHelpers::makeNumericParam("cost", lower = -12, 
                                 upper = 15, trafo = function(x) 2^x),
  ParamHelpers::makeNumericParam("gamma", lower = -15, 
                                 upper = 6, trafo = function(x) 2^x)
)

## create random search grid, small iteration number for example
ctrl.tune <- mlr::makeTuneControlRandom(maxit = 8) 

# inner resampling loop, "
inner <- mlr::makeResampleDesc("SpCV", iters = 3, predict = "both")

# outer loop, "
outer <- mlr::makeResampleDesc("SpRepCV", folds = 5, reps = 2, predict = "both")


## create learner - Support Vector Machine of the e1071-package
lrn.svm <- mlr::makeLearner("classif.svm", predict.type = "prob")

# ... tuning in inner resampling
lrn.svm.tune <- mlr::makeTuneWrapper(learner = lrn.svm, resampling = inner, 
                                     measures = list(auc),
                                     par.set = svm.ps, control = ctrl.tune, 
                                     show.info = FALSE) 


## create function that calculate variable importance based on permutation 
extractVarImpFunction <- function(x)
{
  list(mlr::generateFeatureImportanceData(task = mlr::makeClassifTask(
                          id = x$task.desc$id, 
                          data = mlr::getTaskData(mlr::spatial.task, subset = x$subset), 
                          target = x$task.desc$target,
                          positive = x$task.desc$positive, 
                          coordinates = mlr::spatial.task$coordinates[x$subset,]),
                        method = "permutation.importance", 
                        learner = mlr::makeLearner(cl = "classif.svm", 
                                                     predict.type = "prob", 
                          cost = x$learner.model$opt.result$x$cost,
                          gamma = x$learner.model$opt.result$x$gamma),
                        measure = list(mlr::auc), nmc = 10
                          )$res
      )
}



## start resampling for getting variable importance of tuned models (outer)

# parallelize tuning
parallelMap::parallelStart(mode = "multicore", level = "mlr.tuneParams", cpus = 8)

res.VarImpTuned <- mlr::resample(learner = lrn.svm.tune, task = mlr::spatial.task, 
                                 extract = extractVarImpFunction,
                                 resampling = outer, measures = list(auc), 
                                 models = TRUE, show.info = TRUE)

parallelMap::parallelStop() # stop parallelization

## get mean auroc decrease
var.imp <- do.call(rbind, lapply(res.VarImpTuned$extract, FUN = function(x){x[[1]]}))
var.imp <- data.frame(AUC_DECR = colMeans(var.imp), Variable = names(colMeans(var.imp))) 

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R - mlr:是否有一种简单的方法可以在嵌套重采样(空间)中获得调整后的支持向量机模型的可变重要性? 的相关文章

  • 使用格式表过滤数据框

    样本数据 修改自formattablegithub 文档 df lt data frame id 1 10 name c Bob Ashley James David Jenny Hans Leo John Emily Lee age c
  • 在 R data.table 中计算时间增量

    我有一个篮球运动员数据的数据表 其中包括每场比赛和多名球员的比赛日期 我想创建一个列来计算自上一场比赛以来的天数 我在 R 中使用 data table 包 PLAYERID GAME DATE 1 2989 2014 01 1 2 298
  • 如何扩展 ggplot y 轴限制以包含最大值

    通常 在图中 Y 轴值标签会在绘制的最大值下方被截断 For example library tidyverse mtcars gt ggplot aes x mpg y hp geom point 我知道scale y continous
  • 计算横截面积作为高度的函数

    我试图弄清楚如何计算不同水位的河流横截面的充满水的面积 对于横截面 我有 5 m 宽河流上每 25 cm 的深度 并且可以根据之前很好回答的问题来计算面积计算不同高度的横截面积 https stackoverflow com questio
  • data.table 相当于 dplyr::filter_at

    考虑数据 library data table library magrittr vec1 lt c Iron Copper vec2 lt c Defective Passed Error set seed 123 a1 lt sampl
  • keras 模型拟合:ValueError:无法找到可以处理输入的数据适配器:

    我正在构建一个简单的 CNN 模型用于多类分类 训练和测试数据位于data path根据所需的类子目录flow from directory的函数ImageDataGenerator 这是我根据数据构建和训练模型的代码 from tenso
  • 将 SAS sas7bdat 数据读入 R

    R 有哪些选项可以读取本机 SAS 格式的文件 sas7bdat 进入R The NCES 共同核心 https nces ed gov ccd pubschuniv asp例如 包含以此格式保存的大量数据文件存储库 为了具体起见 让我们集
  • 如何使用 R 更改 png 文件的大小

    我正在绘制 png 文件并获取一张小图片 你知道一些可以改变 png 图大小的简单代码吗 我的地块太高太 薄 另外有没有办法改变情节的分辨率 谢谢 伊格尔 png png filename Rplot 03d png width 480 h
  • 使用 r 以周为单位对数据进行分组

    I have a CVS file which has data for different countries at different weeks of this year I want to create a summary data
  • R:从 Github 安装包时出现编码问题

    我正在尝试安装dcStockR https github com yutannihilation dcStockR来自 Github 的包 这是一个htmlwidgets http www htmlwidgets org 周围的包装纸dc
  • 将 stat_smooth 添加到 ggplot2 中的仅 1 个方面

    我有一些数据 在某个因素的某个水平上 存在显着的相关性 在另一个层面上 则没有 并排绘制这些图很简单 使用 stat smooth 向它们添加一行 也很简单 但是 我不希望线条或其填充显示在两个面之一中 有没有一种简单的方法可以做到这一点
  • R闪亮:基于checkboxgroupinput的子集数据

    我想根据复选框输入动态选择的列对数据进行子集 有什么方法可以使我的输入文件在我的代码中全局可用 以便可以方便地进行进一步的操作 以下是我的代码 Server R library shiny shinyServer function inpu
  • 与heroku配合使用的统计引擎

    我有一个 Heroku Rails 应用程序 需要处理一些重要的数字 并且我需要使用像 R 这样的统计库 更糟糕的是 MatLab 我正在寻找以下任何问题的答案 是否有不需要二进制文件的功能齐全的统计包 GEM 是否可以将 R 二进制文件作
  • 如何使用 Rcpp 将 C 结构从 C 库公开到 R

    我正在尝试将 C 结构从 C 库公开到 R 中 例如 struct A int flag 库提供 API 来构造和销毁是很常见的A A initA void freeA A a 感谢RCPP MODULE 很容易暴露它而不考虑析构函数 in
  • 如何在 R 中创建纯 ascii 表作为输出,类似于 MySQL 风格?

    我正在尝试为 R 找到一个输出的函数data frameMySQL 风格的 ascii 表中的对象如下 id var1 var2 1 asdf g 2 asdf h 3 asdf j 有这样的功能吗 至少有两个工具可以做到这一点 csvfi
  • 省略 RColorBrewer 调色板上较亮的颜色以在 ggplot2 中使用

    我想在 RColorBrewer 的 Oranges 调色板中使用较深的颜色 以便在我的 ggplot 条形图 中使用 然而我却做不到 帮助 下面是示例代码 my palette brewer pal n 9 Oranges 4 9 Bar
  • do.call 的 envir 选项如何工作?

    的文档do call states If quote is FALSE 默认值 然后对参数进行求值 在调用环境中 而不是在envir 这句话向我暗示 当quote FALSE 指定envir没有什么区别 然而 事实并非如此 事实上我遇到过需
  • 包什么时候需要为它自己的对象使用 :::

    考虑这个 R 包有两个函数 一个是导出函数 另一个是内部函数 hello R export hello lt function internalFunctions hello internal 你好 内部 R hello internal
  • ggplot2以限制为中心的多边形世界地图给出了有趣的边缘

    使用下面的代码我生成了一张以华盛顿特区为中心的地图 解决方案基于科斯克的解决方案在这里 https stackoverflow com questions 10620862 use different center than the pri
  • 二部图匹配以匹配两个集合

    我是新手igraphR 中的包 我有两套A and B 每个都有N顶点 A1 A2 AN and B1 B2 BN 每个元素之间都有一个边缘A对每一个元素B 我有一个函数fWgt Ai Bj 返回之间的边的权重Ai and Bj 我一直在尝

随机推荐