获取更多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/
转载文章受原作者版权保护。转载请注明原作者出处!