获取更多R语言知识,请关注公众号:医学和生信笔记
医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
超参数设置
超参数设置是通过paradox包完成的。
reference-based objects
paradox是ParamHelpers的重写版,完全基于R6对象。
library("paradox")ps = ParamSet$new()ps2 = psps3 = ps$clone(deep = TRUE)print(ps) # ps2和ps3是一样的## <ParamSet>## Empty.
ps$add(ParamLgl$new("a"))print(ps)## <ParamSet>## id class lower upper nlevels default value## 1: a ParamLgl NA NA 2 <NoDefault[3]>
设定参数范围(parameter space)
paradox包里面的超参数主要有以下类型:
- ParamInt: 整数
- ParamDbl: 浮点数(小数)
- ParamFct: 因子
- ParamLgl: 逻辑值,TRUE / FALSE
- ParamUty: 能取代任意值的参数
设定超参数范围的完整写法(前面几篇用到的是简写):
library("paradox")parA = ParamLgl$new(id = "A")parB = ParamInt$new(id = "B", lower = 0, upper = 10, tags = c("tag1", "tag2"))parC = ParamDbl$new(id = "C", lower = 0, upper = 4, special_vals = list(NULL))parD = ParamFct$new(id = "D", levels = c("x", "y", "z"), default = "y")parE = ParamUty$new(id = "E", custom_check = function(x) checkmate::checkFunction(x))
每个参数必须包含以下4个部分:
- id - 参数名字
- default - 默认值
- special_vals - A list of values that are accepted even if they do not conform to the type
- tags - Tags that can be used to organize parameters
其中Int/Dbl还有lower/upper两个参数设定范围,Fct还有levels参数设定因子水平。
设置超参数的简便写法:
library(paradox)ps <- ps(cp = p_dbl(lower = 0.001, upper = 0.1),minsplit = p_int(lower = 1, upper = 10))
generate_design_grid(ps, resolution = 5)## <Design> with 25 rows:## cp minsplit## 1: 0.00100 1## 2: 0.00100 3## 3: 0.00100 5## 4: 0.00100 8## 5: 0.00100 10## 6: 0.02575 1## 7: 0.02575 3## 8: 0.02575 5## 9: 0.02575 8## 10: 0.02575 10## 11: 0.05050 1## 12: 0.05050 3## 13: 0.05050 5## 14: 0.05050 8## 15: 0.05050 10## 16: 0.07525 1## 17: 0.07525 3## 18: 0.07525 5## 19: 0.07525 8## 20: 0.07525 10## 21: 0.10000 1## 22: 0.10000 3## 23: 0.10000 5## 24: 0.10000 8## 25: 0.10000 10## cp minsplit
日志控制
mlr3包做机器学习时会在屏幕输出巨多日志,有时候并不需要,我们只要结果就可以了,这个功能是通过lgr这个包实现的。
减少或增加屏幕日志
默认的输出日志水平是info,通过以下代码查看全部的日志水平:
getOption("lgr.log_levels")## NULL
这个水平是有顺序的,越往右边的水平输出的东西越多,所以如果你想减少mlr3包的屏幕输出内容,你可以进行如下设置:
lgr::get_logger("mlr3")$set_threshold("warn")
另外,mlr3tuning和mlr3fselect的日志是通过bbotk包完成的,如果想要减少其输出内容,需要进行如下设置:
lgr::get_logger("bbotk")$set_threshold("warn")
通过以上两句代码,就会显著减少mlr3包做机器学习时的屏幕输出了。
重定向日志
可以把日志保存到单独的JSON文件中。
tf = tempfile("mlr3log_", fileext = ".json")logger = lgr::get_logger("mlr")logger$add_appender(lgr::AppenderJson$new(tf), name = "json")logger$warn("this is a warning from mlr3")## WARN [21:04:23.835] this is a warning from mlr3
# 打印文件看一下cat(readLines(tf))## {"level":300,"timestamp":"2022-02-27 21:04:23","logger":"mlr","caller":"eval","msg":"this is a warning from mlr3"}
获取更多R语言知识,请关注公众号:医学和生信笔记
医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!
