R语言机器学习mlr3:特征选择和hyperband调参

获取更多R语言和生信知识,请关注公众号:医学和生信笔记。
公众号后台回复 R语言,即可获得海量学习资料!

Hyperband调参

Hyperband调参可看做是一种特殊的随机搜索方式,俗话说:”鱼与熊掌不可兼得”,Hyperband就是取其一种,感兴趣的小伙伴可以自己学习一下。

在这里举一个简单的小例子说明:
假如你有8匹马,每匹马需要4个单位的食物才能发挥最好,但是你现在只有32个单位的食物,所以你需要制定一个策略,充分利用32个单位的食物(也就是你的计算资源)来找到最好的马。
两种策略,第一种:直接放弃4匹马,把所有的食物用在另外4匹马上,这样到最后你就能挑选出4匹马中最好的一匹。但是这样的问题就是你不知道被你舍弃的那4匹马会不会有更好的。
第2种策略:在最开始时每匹马给1个单位食物,然后看它们表现,把表现好的4匹留下,表现不好的就舍弃,给予剩下4匹马更多的食物,然后再把表现好的2匹留下,如此循环,最好把剩下的食物给最后1匹马。

我们主要介绍通过 mlr3hyperband包实现这一方法。

library(mlr3verse)

set.seed(123)

ll = po("subsample") %>>% lrn("classif.rpart")

search_space = ps(
  classif.rpart.cp = p_dbl(lower = 0.001, upper = 0.1),
  classif.rpart.minsplit = p_int(lower = 1, upper = 10),
  subsample.frac = p_dbl(lower = 0.1, upper = 1, tags = "budget")
)

instance = TuningInstanceSingleCrit$new(
  task = tsk("iris"),
  learner = ll,
  resampling = rsmp("holdout"),
  measure = msr("classif.ce"),
  terminator = trm("none"),
  search_space = search_space
)

接下来进行hyperband调参:

library(mlr3hyperband)

tuner  tnr("hyperband", eta = 3)

lgr::get_logger("bbotk")$set_threshold("warn")

tuner$optimize(instance)

查看结果:

instance$result

instance$result_learner_param_vals

instance$result_y

特征选择

特征选择也是一门艺术,当我们拿到一份数据时,有很多信息是冗余的,是无效的,对于建模是没有帮助的。这样的变量用于建模只会增加噪声,降低模型表现。把冗余信息去除,挑选最合适的变量的过程被称为 特征选择

这种方法首先把所有预测变量计算一个分数,然后按照分数进行排名,这样我们就可以根据分数挑选合适的预测变量了。

查看支持的计算分数的方法:

mlr_filters

特征工程是很复杂的,想要详细了解的可阅读相关书籍。

目前只支持分类和回归。

filter  flt("jmim")

task  tsk("iris")
filter$calculate(task)

filter

可以看到每个变量都计算出来一个分数。


filter_cor  flt("correlation")

filter_cor$param_set


filter_cor$param_set$values  list(method = "spearman")
filter_cor$param_set

所有支持 importance参数的 learner都支持这种方法。

比如:

lrn  lrn("classif.ranger", importance = "impurity")

task  tsk("iris")
filter  flt("importance", learner = lrn)
filter$calculate(task)
filter

和超参数调优很相似, mlr3fselect包提供支持。

library(mlr3fselect)

task  tsk("pima")
learner  lrn("classif.rpart")
hout  rsmp("holdout")
measure  msr("classif.ce")

evals20  trm("evals", n_evals = 20)

instance  FSelectInstanceSingleCrit$new(
  task = task,
  learner = learner,
  resampling = hout,
  measure = measure,
  terminator = evals20
)
instance

目前 mlr3fselect支持以下方法:

  • Random Search(FSelectRandomSearch)
  • Exhaustive Search (FSelectorExhaustiveSearch)
  • Sequential Search (FSelectorSequential)
  • Recursive Feature Elimination (FSelectorRFE)
  • Design Points (FSelectorDesignPoints)

我们挑选一个随机搜索:

fselector  fs("random_search")

开始运行:

lgr::get_logger("bbotk")$set_threshold("warn")

fselector$optimize(instance)

查看选中的变量:

instance$result_feature_set

查看结果:

instance$result_y

as.data.table(instance$archive)

instance$archive$benchmark_result$data

应用于模型,训练任务:

task$select(instance$result_feature_set)
learner$train(task)
learner = lrn("classif.rpart")
terminator = trm("evals", n_evals = 10)
fselector = fs("random_search")

at = AutoFSelector$new(
  learner = learner,
  resampling = rsmp("holdout"),
  measure = msr("classif.ce"),
  terminator = terminator,
  fselector = fselector
)
at

比较不同的子集得到的模型表现:

grid = benchmark_grid(
  task = tsk("pima"),
  learner = list(at, lrn("classif.rpart")),
  resampling = rsmp("cv", folds = 3)
)

bmr = benchmark(grid, store_models = TRUE)

bmr$aggregate(msrs(c("classif.ce", "time_train")))

获取更多R语言和生信知识,请关注公众号:医学和生信笔记。
公众号后台回复 R语言,即可获得海量学习资料!

Original: https://blog.csdn.net/Ayue0616/article/details/123421580
Author: 医学和生信笔记
Title: R语言机器学习mlr3:特征选择和hyperband调参

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/698208/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球