mlr3
高效、面向对象的机器学习基础构建模块编程。mlr的继任者。
资源(适用于用户和开发者)
- 我们编写了一本书。这应该是包的主要入口点。
- mlr-org网站包括例如一个包含案例研究的画廊。
- 参考手册
- 常见问题
- 在Stackoverflow(标签#mlr3)上提问
- 扩展学习器
- 推荐的核心回归、分类和生存学习器在mlr3learners中
- 所有其他学习器在mlr3extralearners中
- 使用学习器搜索获得简单概览
- 速查表
- 视频:
- 课程/讲座
- 机器学习导论(I2ML)是一个免费开放的翻转课堂课程,介绍机器学习基础知识。
mlr3
在演示和练习中使用。
- 机器学习导论(I2ML)是一个免费开放的翻转课堂课程,介绍机器学习基础知识。
- 模板/教程
- mlr3-targets:展示如何将{mlr3}与targets结合使用,实现可重复的机器学习工作流自动化。
- 扩展包列表
- mlr-outreach包含公开演讲和幻灯片资源。
- Wiki:主要包含开发者信息。
安装
从CRAN安装最新版本:
install.packages("mlr3")
从GitHub安装开发版本:
remotes::install_github("mlr-org/mlr3")
如果您想开始使用mlr3
,我们建议安装mlr3verse元包,它会安装mlr3
和一些最重要的扩展包:
install.packages("mlr3verse")
示例
构建学习器和任务
library(mlr3)
# 创建学习任务
task_penguins = as_task_classif(species ~ ., data = palmerpenguins::penguins)
task_penguins
## <TaskClassif:palmerpenguins::penguins> (344 x 8)
## * 目标: species
## * 属性: multiclass
## * 特征 (7):
## - int (3): body_mass_g, flipper_length_mm, year
## - dbl (2): bill_depth_mm, bill_length_mm
## - fct (2): island, sex
# 加载学习器并设置超参数
learner = lrn("classif.rpart", cp = .01)
基本训练 + 预测
# 训练/测试集划分
split = partition(task_penguins, ratio = 0.67)
# 训练模型
learner$train(task_penguins, split$train_set)
# 预测数据
prediction = learner$predict(task_penguins, split$test_set)
# 计算性能
prediction$confusion
## truth
## response Adelie Chinstrap Gentoo
## Adelie 146 5 0
## Chinstrap 6 63 1
## Gentoo 0 0 123
measure = msr("classif.acc")
prediction$score(measure)
## classif.acc
## 0.9651163
重采样
# 3折交叉验证
resampling = rsmp("cv", folds = 3L)
# 运行实验
rr = resample(task_penguins, learner, resampling)
# 访问结果
rr$score(measure)[, .(task_id, learner_id, iteration, classif.acc)]
## task_id learner_id iteration classif.acc
## 1: palmerpenguins::penguins classif.rpart 1 0.9391304
## 2: palmerpenguins::penguins classif.rpart 2 0.9478261
## 3: palmerpenguins::penguins classif.rpart 3 0.9298246
rr$aggregate(measure)
## classif.acc
## 0.938927
扩展包
查阅wiki获取简短描述和各个仓库的链接。
对于初学者,我们强烈建议安装并加载mlr3verse包以获得更好的用户体验。
为什么要重写?
mlr于2013年首次发布到CRAN。它的核心设计和架构可以追溯到更早。添加许多功能导致了功能蔓延,这使得mlr难以维护和扩展。我们还认为,虽然mlr在某些方面(学习器、度量等)可以很好地扩展,但其他方面从外部扩展起来并不容易。此外,在创建mlr时,许多有用的R库还不存在,包含它们将导致API的重大变化。
设计原则
- 本包只实现了机器学习的基本构建模块。
- 这里专注于计算。没有可视化或其他内容。那些可以放在额外的包中。
- 借助R6克服R的S3类的限制。
- 采用R6实现清晰的面向对象设计、对象状态变化和引用语义。这可能不太"传统R",但似乎很适合
mlr
。 - 采用
data.table
进行快速便捷的数据框计算。 - 结合
data.table
和R6
,为此我们将大量使用data.table中的列表列。 - 防御性编程和类型安全。所有用户输入都通过
checkmate
进行检查。返回类型有文档记录,避免使用基础R中那些不可预测地"简化"结果的机制(如sapply()
或[.data.frame
中的drop
参数)。 - 依赖项少。
mlr3
在运行时需要以下包:parallelly
:并行化辅助函数。无额外递归依赖。future.apply
:使用future
抽象接口进行重采样和基准测试的并行化,可连接多个并行后端。backports
:确保与旧版R的向后兼容性。由mlr
团队成员开发。无递归依赖。checkmate
:快速参数检查。由mlr
团队成员开发。无额外递归依赖。mlr3misc
:在多个mlr3扩展包中使用的杂项函数。由mlr
团队开发。paradox
:参数和参数集的描述。由mlr
团队开发。无额外递归依赖。R6
:引用类对象。无递归依赖。data.table
:R的data.frame
扩展。无递归依赖。digest
(通过mlr3misc
):哈希摘要。无递归依赖。uuid
:创建唯一字符串标识符。无递归依赖。lgr
:日志工具。无额外递归依赖。mlr3measures
:性能度量。无额外递归依赖。mlbench
:机器学习数据集集合。无依赖。palmerpenguins
:关于企鹅的分类数据集,用于示例并作为玩具任务提供。无依赖。
- 反射:可以查询对象的属性和功能,允许您对它们进行编程。
- 带有额外依赖项的附加功能:
为mlr3做贡献
这个R包采用LGPL-3许可。如果您在使用这个软件时遇到问题(缺少文档、误导或错误的文档、意外行为、错误等)或只是想提出功能建议,请在问题追踪器中提出问题。欢迎提交拉取请求,维护者将酌情纳入。
请查阅wiki获取风格指南、roxygen指南和拉取请求指南。
引用mlr3
如果您使用mlr3,请引用我们的JOSS文章: @文章{mlr3, 标题 = {{mlr3}: R语言中的现代面向对象机器学习框架}, 作者 = {Michel Lang 和 Martin Binder 和 Jakob Richter 和 Patrick Schratz 和 Florian Pfisterer 和 Stefan Coors 和 Quay Au 和 Giuseppe Casalicchio 和 Lars Kotthoff 和 Bernd Bischl}, 期刊 = {开源软件杂志}, 年份 = {2019}, 月份 = {12月}, doi = {10.21105/joss.01903}, 网址 = {https://joss.theoj.org/papers/10.21105/joss.01903}, }