1 介绍和概述

mlr3book :https://mlr3book.mlr-org.com/intro.html

1.介绍和概述

 (Machine Learning in R) mlr3 (Lang 等人,2019) 包及其生态系统为 R 语言 (R Core Team,2019) 提供了一个通用、面向对象和可扩展的框架,用于回归(附录 C)、分类(第 2.4 节)和其他机器学习任务(第 8 章)。这个统一的接口提供了功能,可以扩展和组合现有的机器学习算法(学习器(第 2.2 节)),智能地选择和调整适合给定机器学习任务的最合适技术(附录 C),并执行大规模比较,从而实现元学习。这些高级功能的示例包括超参数调整(第 4 章)和特征选择(第 5 章)。许多操作的并行化得到了本地支持(第 9.1 节)。

    mlr3 的整体目标类似于 caret、tidymodels、Python 的 scikit-learn1,以及 Julia 的 MLJ2。通常情况下,mlr3 的设计旨在提供比其他机器学习框架更多的灵活性,同时仍然提供使用高级功能的简单方法。特别是,虽然 tidymodels 使执行简单的机器学习任务非常容易,但 mlr3 更适用于高级机器学习。如果想快速了解如何在 mlr3verse 中完成任务,请参阅 mlr3 cheatsheets3。

    mlr3 为 R 中现有的学习器提供了统一的接口。除了一些例外,我们不会自己实现任何学习器,尽管我们经常增强底层学习器提供的功能。特别是,这包括为调整定义超参数空间

1.1 目标受众

    我们假定 mlr3 的用户已经学习过机器学习入门课程或者具备等同的专业知识,并且有一些 R 基础经验。计算机科学或统计学背景有助于理解本书后面章节描述的高级功能,但不是必需的。对于新手来说,(James et al. 2014) 提供了全面的机器学习入门介绍。

    mlr3 提供了一个领域特定语言(DSL),用于在 R 中进行机器学习,它能够从简单的练习到复杂的项目应对一切。我们的目标对象既包括想要快速应用机器学习算法的从业者,也包括想要在结构化环境中实现、评估和比较新方法的研究人员。

1.2 从mlr到mlr3

    mlr 包(Bischl et al. 2016)于2013年首次发布到CRAN4,其核心设计和架构远在更早的时期就开始了。随着时间的推移,许多功能的添加使得其设计变得更加复杂,这使得构建、维护和扩展变得更加困难。事后看来,我们意识到 mlr 中的一些设计和架构选择使得支持新功能变得困难,特别是在机器学习流程方面。此外,在 mlr 最初设计之后,R 生态系统和诸如 data.table 等有用的包已经发生了重大变化。因此,我们决定开发一个全新的包,即 mlr3,以满足不断增长的需求,并更好地适应现代 R 生态系统的变化。

    在原有的mlr设计中,整合所有这些变化是不可能的。因此,我们决定在2018年开始重新实现,最终在2019年7月推出了mlr3的首个版本。

    mlr3的新设计以及进一步整合和新开发的R包(特别是R6、future和data.table)使其比原来的mlr更易于使用、维护和在许多方面更高效。生态系统中的包之间的联系不再那么紧密,使它们更易于维护和开发,特别是非常专业的包。

1.3 设计原则

1.3 设计原则

本节内容可能不是所有读者都感兴趣。

在 mlr3 包和 mlr3verse 生态系统中,我们遵循以下一般设计原则:

计算和表现的分离。mlr3 生态系统的大多数包都专注于数据处理和转换、应用机器学习算法以及计算结果。我们的核心包不提供图形用户界面(GUI),因为它们的依赖关系会使安装变得复杂,特别是在服务器上。出于同样的原因,数据和结果的可视化是在额外的包 mlr3viz 中提供的,该包避免了对 ggplot2 的依赖。mlr3shiny 则提供了使用 shiny 包进行一些基本机器学习任务的界面。

面向对象编程(OOP)。采用 R6 进行干净、面向对象的设计、对象状态更改和引用语义。

表格数据。采用 data.table,它具有一流的计算性能以及可以进一步轻松处理的表格数据作为数据结构。

统一输入和输出数据格式。这大大简化了 API,并允许轻松选择和“拆分-应用-合并”(聚合)操作。我们将 data.table 和 R6 结合起来,将非原子和复合对象的引用放在表中,并大量使用列表列。

防御性编程和类型安全。所有用户输入都经过 checkmate(Lang 2017)检查。我们记录返回类型,并避免在基本 R 中流行的“简化”结果的机制(例如 sapply() 或用于索引数据.frame 的 drop 参数)。此外,我们还拥有广泛的单元测试!

依赖性较少。对于 mlr 来说,主要的维护负担之一是跟踪它所依赖的许多包的学习者接口和行为的变化。我们在 mlr3 中需要较少的包以使安装和维护更容易。我们仍然提供相同的功能,但将其拆分为更多包,每个包都具有较少的依赖性。正如上面提到的,这尤其适用于所有可视化功能,它们包含在一个单独的包中,以避免所有其他包中的不必要依赖性。

1.4 包生态系统

mlr3 依赖于以下流行和经过良好验证的包,这些包不是由 mlr3 核心成员开发的:

  • R6:在 mlr3 中主要使用的类系统。

  • data.table:高性能的 R 数据框扩展。

  • digest:密码哈希函数。 uuid:生成通用唯一标识符。

  • lgr:高度可配置的日志记录库。

  • mlbench 和 palmerpenguins:更多的机器学习数据集。

  • evaluate:用于捕获输出、警告和异常 (第 9.2 节)。

  • future / future.apply:用于并行化 (第 9.1 节)。

    mlr3 包本身提供了 mlr3verse 中其余部分所依赖的基础功能和机器学习的基本构建块。图 1.1 显示了 mlr3verse 中的包,这些包扩展了 mlr3 的预处理、流水线、可视化、额外的学习器、额外的任务类型等功能。


    image-20230311103155224.png
    我们使用 R6 进行面向对象编程,并使用 data.table 存储和操作表格数据。这两个包都是 mlr3 的核心,我们为初学者简要介绍这两个包。虽然深入了解这些包并不是必需的,但需要基本理解才能有效地使用 mlr3。

1.5 R6入门指南

    R6是R中较新的面向对象编程范例之一,它解决了R中早期OO实现(如mlr中使用的S3)的缺点。如果您以前做过面向对象编程,R6应该很熟悉。我们重点介绍您需要了解的R6部分,以便有效地使用mlr3。

    对象通过调用R6::R6Class()对象的构造函数来创建,具体来说是初始化方法$new()。例如,foo = Foo$new(bar = 1)创建了一个新的Foo类对象,将构造函数的bar参数设置为值1。

    对象具有可变状态,该状态封装在它们的字段中,可以通过美元符号操作符进行访问。我们可以通过foo$bar访问foo变量中的bar值,并通过分配字段来设置其值,例如foo$bar = 2。

    除了字段之外,对象还公开了方法,允许检查对象的状态、检索信息或执行更改对象内部状态的操作。例如,一个学习器的$train()方法通过构建和存储模型来改变学习器的内部状态,然后可以用于进行预测。

        对象可以有公共和私有字段和方法。公共字段和方法定义了与对象交互的API。私有方法只有在您想要扩展mlr3(例如使用新的学习器)时才相关。

        从技术上讲,R6对象是环境,因此具有引用语义。例如,foo2 = foo不会在foo2中创建foo的副本,而是创建另一个引用指向同一实际对象。设置foo$bar = 3也会将foo2$bar更改为3,反之亦然。

            要复制对象,请使用$clone()方法和deep = TRUE参数进行嵌套对象的深复制,例如foo2 = foo$clone(deep = TRUE)。

1.6 data.table入门指南

    包data.table实现了R中存储表格数据的流行替代方案,即一个对象。我们决定使用data.table,因为它运行速度非???,可以很好地扩展到更大的数据。

    注意: 许多mlr3函数返回data.table,可以方便地对其进行子集处理或与其他输出进行组合。如果您不喜欢这种语法或更喜欢其他工具,基本的data.frame或tibble/dplyrs只需要一个as.data.frame()或as_tibble()转换即可。

    可以使用data.table()函数(其界面类似于data.frame())构造数据表,也可以通过使用as.data.table()函数将对象转换为数据表。
library("data.table")
dt = data.table(x = 1:6, y = rep(letters[1:3], each = 2))
dt
image-20230311103706146.png
data.table可以像data.frame一样使用,但它们提供了额外的功能,使得复杂操作更容易。例如,可以使用 [ 运算符按组对数据进行汇总:
dt[, mean(x), by = "y"]
y    V1 

1: a 1.5

2: b 3.5

3: c 5.5

1.7 重要的mlr3实用工具

    Sugar函数 mlr3中的大多数对象都可以通过称为Sugar函数的便捷函数创建。它们提供了常见代码习惯的快捷方式,减少了用户需要编写的代码量。本书中我们大量使用Sugar函数,并给出了完整的“全称”以获得完整的细节。在大多数情况下,Sugar函数将实现您想要执行的操作,只有在编写自定义对象或扩展时才需要考虑使用完整的R6代码。例如,lrn(“regr.rpart”)是LearnerRegrRpart $ new()的Sugar版本。

        字典 mlr3使用字典来存储学习器或任务等对象。这些是键值存储,允许将键与值关联起来,值可以是R6对象,就像纸质字典将单词与它们的定义关联起来一样。通常,通过Sugar函数访问字典中的值,这些函数自动使用适用的字典,而无需用户指定;只需要指定要检索的键即可。字典用于分组相关对象,以便可以轻松地列出和检索它们。例如,可以直接从mlr_learners字典中使用键“classif.featureless”检索学习器(mlr_learners $ get(“classif.featureless”)),并且可以使用as.data.table(mlr_learners)获取所有存储的学习器的概述。

        mlr3viz mlr3viz是mlr3生态系统中所有绘图功能的包。该包使用常见主题(ggplot2 :: theme_minimal()),使所有生成的图表具有类似的美学。在幕后,mlr3viz使用ggplot2。mlr3viz扩展了fortify和autoplot,用于与Prediction,Learner和Benchmark对象一起使用的常见mlr3输出(这些对象将在下一章中介绍和涵盖)。 mlr3viz的最常见用法是autoplot()函数,其中传递的对象类型决定了绘图类型?;嫱祭嘈图锹荚诳赏ü??autoplot.X访问的各自手册页面中。例如,可以通过运行?autoplot.TaskRegr找到回归任务的图表文档。
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容