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

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

超参数设置

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

reference-based objects

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

  1. library("paradox")
  2. ps = ParamSet$new()
  3. ps2 = ps
  4. ps3 = ps$clone(deep = TRUE)
  5. print(ps) # ps2和ps3是一样的
  6. ## <ParamSet>
  7. ## Empty.
  1. ps$add(ParamLgl$new("a"))
  2. print(ps)
  3. ## <ParamSet>
  4. ## id class lower upper nlevels default value
  5. ## 1: a ParamLgl NA NA 2 <NoDefault[3]>

设定参数范围(parameter space)

paradox包里面的超参数主要有以下类型:

  • ParamInt: 整数
  • ParamDbl: 浮点数(小数)
  • ParamFct: 因子
  • ParamLgl: 逻辑值,TRUE / FALSE
  • ParamUty: 能取代任意值的参数

设定超参数范围的完整写法(前面几篇用到的是简写):

  1. library("paradox")
  2. parA = ParamLgl$new(id = "A")
  3. parB = ParamInt$new(id = "B", lower = 0, upper = 10, tags = c("tag1", "tag2"))
  4. parC = ParamDbl$new(id = "C", lower = 0, upper = 4, special_vals = list(NULL))
  5. parD = ParamFct$new(id = "D", levels = c("x", "y", "z"), default = "y")
  6. 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参数设定因子水平。

设置超参数的简便写法:

  1. library(paradox)
  2. ps <- ps(
  3. cp = p_dbl(lower = 0.001, upper = 0.1),
  4. minsplit = p_int(lower = 1, upper = 10)
  5. )
  1. generate_design_grid(ps, resolution = 5)
  2. ## <Design> with 25 rows:
  3. ## cp minsplit
  4. ## 1: 0.00100 1
  5. ## 2: 0.00100 3
  6. ## 3: 0.00100 5
  7. ## 4: 0.00100 8
  8. ## 5: 0.00100 10
  9. ## 6: 0.02575 1
  10. ## 7: 0.02575 3
  11. ## 8: 0.02575 5
  12. ## 9: 0.02575 8
  13. ## 10: 0.02575 10
  14. ## 11: 0.05050 1
  15. ## 12: 0.05050 3
  16. ## 13: 0.05050 5
  17. ## 14: 0.05050 8
  18. ## 15: 0.05050 10
  19. ## 16: 0.07525 1
  20. ## 17: 0.07525 3
  21. ## 18: 0.07525 5
  22. ## 19: 0.07525 8
  23. ## 20: 0.07525 10
  24. ## 21: 0.10000 1
  25. ## 22: 0.10000 3
  26. ## 23: 0.10000 5
  27. ## 24: 0.10000 8
  28. ## 25: 0.10000 10
  29. ## cp minsplit

日志控制

mlr3包做机器学习时会在屏幕输出巨多日志,有时候并不需要,我们只要结果就可以了,这个功能是通过lgr这个包实现的。

减少或增加屏幕日志

默认的输出日志水平是info,通过以下代码查看全部的日志水平:

  1. getOption("lgr.log_levels")
  2. ## NULL

这个水平是有顺序的,越往右边的水平输出的东西越多,所以如果你想减少mlr3包的屏幕输出内容,你可以进行如下设置:

  1. lgr::get_logger("mlr3")$set_threshold("warn")

另外,mlr3tuningmlr3fselect的日志是通过bbotk包完成的,如果想要减少其输出内容,需要进行如下设置:

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

通过以上两句代码,就会显著减少mlr3包做机器学习时的屏幕输出了。

重定向日志

可以把日志保存到单独的JSON文件中。

  1. tf = tempfile("mlr3log_", fileext = ".json")
  2. logger = lgr::get_logger("mlr")
  3. logger$add_appender(lgr::AppenderJson$new(tf), name = "json")
  4. logger$warn("this is a warning from mlr3")
  5. ## WARN [21:04:23.835] this is a warning from mlr3
  1. # 打印文件看一下
  2. cat(readLines(tf))
  3. ## {"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.生物信息学学习资料和自己的学习笔记!