R语言机器学习mlr3:技术细节

获取更多R语言和生信知识,请欢迎关注公众号:医学和生信笔记

医学和生信笔记 公众号主要分享:1.医学小知识、肛肠科小知识;2.R语言和Python相关的数据分析、可视化、机器学习等;3.生物信息学学习资料和自己的学习笔记!

目录

    • 超参数设置
      • reference-based objects
      • 设定参数范围(parameter space)
    • 日志控制
      • 减少或增加屏幕日志
      • 重定向日志

超参数设置

超参数设置是通过paradox包完成的。

reference-based objects

paradoxParamHelpers的重写版,完全基于R6对象。

library("paradox")

ps = ParamSet$new()
ps2 = ps
ps3 = ps$clone(deep = TRUE)
print(ps) # ps2和ps3是一样的
## 
## Empty.
ps$add(ParamLgl$new("a"))
print(ps)
## 
##    id    class lower upper nlevels        default value
## 1:  a ParamLgl    NA    NA       2 

设定参数范围(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)
##  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")

另外,mlr3tuningmlr3fselect的日志是通过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.生物信息学学习资料和自己的学习笔记!

你可能感兴趣的:(R语言机器学习,r语言,机器学习,python)