mlr3book :https://mlr3book.mlr-org.com/intro.html
1.介紹和概述
(Machine Learning in R) mlr3 (Lang 等人,2019) 包及其生態(tài)系統(tǒng)為 R 語(yǔ)言 (R Core Team顾犹,2019) 提供了一個(gè)通用倒庵、面向?qū)ο蠛涂蓴U(kuò)展的框架,用于回歸(附錄 C)炫刷、分類(lèi)(第 2.4 節(jié))和其他機(jī)器學(xué)習(xí)任務(wù)(第 8 章)擎宝。這個(gè)統(tǒng)一的接口提供了功能,可以擴(kuò)展和組合現(xiàn)有的機(jī)器學(xué)習(xí)算法(學(xué)習(xí)器(第 2.2 節(jié)))浑玛,智能地選擇和調(diào)整適合給定機(jī)器學(xué)習(xí)任務(wù)的最合適技術(shù)(附錄 C)绍申,并執(zhí)行大規(guī)模比較,從而實(shí)現(xiàn)元學(xué)習(xí)顾彰。這些高級(jí)功能的示例包括超參數(shù)調(diào)整(第 4 章)和特征選擇(第 5 章)极阅。許多操作的并行化得到了本地支持(第 9.1 節(jié))。
mlr3 的整體目標(biāo)類(lèi)似于 caret涨享、tidymodels涂屁、Python 的 scikit-learn1,以及 Julia 的 MLJ2灰伟。通常情況下拆又,mlr3 的設(shè)計(jì)旨在提供比其他機(jī)器學(xué)習(xí)框架更多的靈活性,同時(shí)仍然提供使用高級(jí)功能的簡(jiǎn)單方法栏账。特別是帖族,雖然 tidymodels 使執(zhí)行簡(jiǎn)單的機(jī)器學(xué)習(xí)任務(wù)非常容易,但 mlr3 更適用于高級(jí)機(jī)器學(xué)習(xí)挡爵。如果想快速了解如何在 mlr3verse 中完成任務(wù)竖般,請(qǐng)參閱 mlr3 cheatsheets3。
mlr3 為 R 中現(xiàn)有的學(xué)習(xí)器提供了統(tǒng)一的接口茶鹃。除了一些例外涣雕,我們不會(huì)自己實(shí)現(xiàn)任何學(xué)習(xí)器,盡管我們經(jīng)常增強(qiáng)底層學(xué)習(xí)器提供的功能闭翩。特別是挣郭,這包括為調(diào)整定義超參數(shù)空間
1.1 目標(biāo)受眾
我們假定 mlr3 的用戶(hù)已經(jīng)學(xué)習(xí)過(guò)機(jī)器學(xué)習(xí)入門(mén)課程或者具備等同的專(zhuān)業(yè)知識(shí),并且有一些 R 基礎(chǔ)經(jīng)驗(yàn)疗韵。計(jì)算機(jī)科學(xué)或統(tǒng)計(jì)學(xué)背景有助于理解本書(shū)后面章節(jié)描述的高級(jí)功能兑障,但不是必需的。對(duì)于新手來(lái)說(shuō),(James et al. 2014) 提供了全面的機(jī)器學(xué)習(xí)入門(mén)介紹流译。
mlr3 提供了一個(gè)領(lǐng)域特定語(yǔ)言(DSL)逞怨,用于在 R 中進(jìn)行機(jī)器學(xué)習(xí),它能夠從簡(jiǎn)單的練習(xí)到復(fù)雜的項(xiàng)目應(yīng)對(duì)一切福澡。我們的目標(biāo)對(duì)象既包括想要快速應(yīng)用機(jī)器學(xué)習(xí)算法的從業(yè)者叠赦,也包括想要在結(jié)構(gòu)化環(huán)境中實(shí)現(xiàn)、評(píng)估和比較新方法的研究人員革砸。
1.2 從mlr到mlr3
mlr 包(Bischl et al. 2016)于2013年首次發(fā)布到CRAN4除秀,其核心設(shè)計(jì)和架構(gòu)遠(yuǎn)在更早的時(shí)期就開(kāi)始了。隨著時(shí)間的推移业岁,許多功能的添加使得其設(shè)計(jì)變得更加復(fù)雜,這使得構(gòu)建寇蚊、維護(hù)和擴(kuò)展變得更加困難笔时。事后看來(lái),我們意識(shí)到 mlr 中的一些設(shè)計(jì)和架構(gòu)選擇使得支持新功能變得困難仗岸,特別是在機(jī)器學(xué)習(xí)流程方面允耿。此外,在 mlr 最初設(shè)計(jì)之后扒怖,R 生態(tài)系統(tǒng)和諸如 data.table 等有用的包已經(jīng)發(fā)生了重大變化较锡。因此,我們決定開(kāi)發(fā)一個(gè)全新的包盗痒,即 mlr3蚂蕴,以滿(mǎn)足不斷增長(zhǎng)的需求,并更好地適應(yīng)現(xiàn)代 R 生態(tài)系統(tǒng)的變化俯邓。
在原有的mlr設(shè)計(jì)中骡楼,整合所有這些變化是不可能的。因此稽鞭,我們決定在2018年開(kāi)始重新實(shí)現(xiàn)鸟整,最終在2019年7月推出了mlr3的首個(gè)版本。
mlr3的新設(shè)計(jì)以及進(jìn)一步整合和新開(kāi)發(fā)的R包(特別是R6朦蕴、future和data.table)使其比原來(lái)的mlr更易于使用篮条、維護(hù)和在許多方面更高效。生態(tài)系統(tǒng)中的包之間的聯(lián)系不再那么緊密吩抓,使它們更易于維護(hù)和開(kāi)發(fā)涉茧,特別是非常專(zhuān)業(yè)的包。
1.3 設(shè)計(jì)原則
1.3 設(shè)計(jì)原則
本節(jié)內(nèi)容可能不是所有讀者都感興趣疹娶。
在 mlr3 包和 mlr3verse 生態(tài)系統(tǒng)中降瞳,我們遵循以下一般設(shè)計(jì)原則:
計(jì)算和表現(xiàn)的分離。mlr3 生態(tài)系統(tǒng)的大多數(shù)包都專(zhuān)注于數(shù)據(jù)處理和轉(zhuǎn)換、應(yīng)用機(jī)器學(xué)習(xí)算法以及計(jì)算結(jié)果挣饥。我們的核心包不提供圖形用戶(hù)界面(GUI)除师,因?yàn)樗鼈兊囊蕾?lài)關(guān)系會(huì)使安裝變得復(fù)雜,特別是在服務(wù)器上扔枫。出于同樣的原因汛聚,數(shù)據(jù)和結(jié)果的可視化是在額外的包 mlr3viz 中提供的,該包避免了對(duì) ggplot2 的依賴(lài)短荐。mlr3shiny 則提供了使用 shiny 包進(jìn)行一些基本機(jī)器學(xué)習(xí)任務(wù)的界面倚舀。
面向?qū)ο缶幊蹋∣OP)。采用 R6 進(jìn)行干凈忍宋、面向?qū)ο蟮脑O(shè)計(jì)痕貌、對(duì)象狀態(tài)更改和引用語(yǔ)義。
表格數(shù)據(jù)糠排。采用 data.table舵稠,它具有一流的計(jì)算性能以及可以進(jìn)一步輕松處理的表格數(shù)據(jù)作為數(shù)據(jù)結(jié)構(gòu)。
統(tǒng)一輸入和輸出數(shù)據(jù)格式入宦。這大大簡(jiǎn)化了 API哺徊,并允許輕松選擇和“拆分-應(yīng)用-合并”(聚合)操作。我們將 data.table 和 R6 結(jié)合起來(lái)乾闰,將非原子和復(fù)合對(duì)象的引用放在表中落追,并大量使用列表列。
防御性編程和類(lèi)型安全涯肩。所有用戶(hù)輸入都經(jīng)過(guò) checkmate(Lang 2017)檢查轿钠。我們記錄返回類(lèi)型,并避免在基本 R 中流行的“簡(jiǎn)化”結(jié)果的機(jī)制(例如 sapply() 或用于索引數(shù)據(jù).frame 的 drop 參數(shù))病苗。此外谣膳,我們還擁有廣泛的單元測(cè)試!
依賴(lài)性較少铅乡。對(duì)于 mlr 來(lái)說(shuō)继谚,主要的維護(hù)負(fù)擔(dān)之一是跟蹤它所依賴(lài)的許多包的學(xué)習(xí)者接口和行為的變化。我們?cè)?mlr3 中需要較少的包以使安裝和維護(hù)更容易阵幸。我們?nèi)匀惶峁┫嗤墓δ芑模珜⑵洳鸱譃楦喟總€(gè)包都具有較少的依賴(lài)性挚赊。正如上面提到的诡壁,這尤其適用于所有可視化功能柜裸,它們包含在一個(gè)單獨(dú)的包中娜饵,以避免所有其他包中的不必要依賴(lài)性。
1.4 包生態(tài)系統(tǒng)
mlr3 依賴(lài)于以下流行和經(jīng)過(guò)良好驗(yàn)證的包渣玲,這些包不是由 mlr3 核心成員開(kāi)發(fā)的:
R6:在 mlr3 中主要使用的類(lèi)系統(tǒng)。
data.table:高性能的 R 數(shù)據(jù)框擴(kuò)展夺克。
digest:密碼哈希函數(shù)箕宙。 uuid:生成通用唯一標(biāo)識(shí)符。
lgr:高度可配置的日志記錄庫(kù)铺纽。
mlbench 和 palmerpenguins:更多的機(jī)器學(xué)習(xí)數(shù)據(jù)集柬帕。
evaluate:用于捕獲輸出、警告和異常 (第 9.2 節(jié))狡门。
-
future / future.apply:用于并行化 (第 9.1 節(jié))陷寝。
mlr3 包本身提供了 mlr3verse 中其余部分所依賴(lài)的基礎(chǔ)功能和機(jī)器學(xué)習(xí)的基本構(gòu)建塊。圖 1.1 顯示了 mlr3verse 中的包其馏,這些包擴(kuò)展了 mlr3 的預(yù)處理凤跑、流水線、可視化叛复、額外的學(xué)習(xí)器仔引、額外的任務(wù)類(lèi)型等功能。
我們使用 R6 進(jìn)行面向?qū)ο缶幊讨鲁叮⑹褂?data.table 存儲(chǔ)和操作表格數(shù)據(jù)肤寝。這兩個(gè)包都是 mlr3 的核心当辐,我們?yōu)槌鯇W(xué)者簡(jiǎn)要介紹這兩個(gè)包抖僵。雖然深入了解這些包并不是必需的,但需要基本理解才能有效地使用 mlr3缘揪。
1.5 R6入門(mén)指南
R6是R中較新的面向?qū)ο缶幊谭独凰H海鉀Q了R中早期OO實(shí)現(xiàn)(如mlr中使用的S3)的缺點(diǎn)。如果您以前做過(guò)面向?qū)ο缶幊陶殷荩琑6應(yīng)該很熟悉蹈垢。我們重點(diǎn)介紹您需要了解的R6部分,以便有效地使用mlr3袖裕。
對(duì)象通過(guò)調(diào)用R6::R6Class()對(duì)象的構(gòu)造函數(shù)來(lái)創(chuàng)建曹抬,具體來(lái)說(shuō)是初始化方法$new()。例如急鳄,foo = Foo$new(bar = 1)創(chuàng)建了一個(gè)新的Foo類(lèi)對(duì)象谤民,將構(gòu)造函數(shù)的bar參數(shù)設(shè)置為值1。
對(duì)象具有可變狀態(tài)疾宏,該狀態(tài)封裝在它們的字段中张足,可以通過(guò)美元符號(hào)操作符進(jìn)行訪問(wèn)。我們可以通過(guò)foo$bar訪問(wèn)foo變量中的bar值坎藐,并通過(guò)分配字段來(lái)設(shè)置其值为牍,例如foo$bar = 2。
除了字段之外,對(duì)象還公開(kāi)了方法碉咆,允許檢查對(duì)象的狀態(tài)抖韩、檢索信息或執(zhí)行更改對(duì)象內(nèi)部狀態(tài)的操作。例如吟逝,一個(gè)學(xué)習(xí)器的$train()方法通過(guò)構(gòu)建和存儲(chǔ)模型來(lái)改變學(xué)習(xí)器的內(nèi)部狀態(tài)帽蝶,然后可以用于進(jìn)行預(yù)測(cè)。
對(duì)象可以有公共和私有字段和方法块攒。公共字段和方法定義了與對(duì)象交互的API励稳。私有方法只有在您想要擴(kuò)展mlr3(例如使用新的學(xué)習(xí)器)時(shí)才相關(guān)。
從技術(shù)上講囱井,R6對(duì)象是環(huán)境驹尼,因此具有引用語(yǔ)義。例如庞呕,foo2 = foo不會(huì)在foo2中創(chuàng)建foo的副本新翎,而是創(chuàng)建另一個(gè)引用指向同一實(shí)際對(duì)象。設(shè)置foo$bar = 3也會(huì)將foo2$bar更改為3住练,反之亦然地啰。
要復(fù)制對(duì)象,請(qǐng)使用$clone()方法和deep = TRUE參數(shù)進(jìn)行嵌套對(duì)象的深復(fù)制讲逛,例如foo2 = foo$clone(deep = TRUE)亏吝。
1.6 data.table入門(mén)指南
包data.table實(shí)現(xiàn)了R中存儲(chǔ)表格數(shù)據(jù)的流行替代方案,即一個(gè)對(duì)象盏混。我們決定使用data.table蔚鸥,因?yàn)樗\(yùn)行速度非常快许赃,可以很好地?cái)U(kuò)展到更大的數(shù)據(jù)止喷。
注意: 許多mlr3函數(shù)返回data.table,可以方便地對(duì)其進(jìn)行子集處理或與其他輸出進(jìn)行組合混聊。如果您不喜歡這種語(yǔ)法或更喜歡其他工具弹谁,基本的data.frame或tibble/dplyrs只需要一個(gè)as.data.frame()或as_tibble()轉(zhuǎn)換即可。
可以使用data.table()函數(shù)(其界面類(lèi)似于data.frame())構(gòu)造數(shù)據(jù)表句喜,也可以通過(guò)使用as.data.table()函數(shù)將對(duì)象轉(zhuǎn)換為數(shù)據(jù)表预愤。
library("data.table")
dt = data.table(x = 1:6, y = rep(letters[1:3], each = 2))
dt
data.table可以像data.frame一樣使用,但它們提供了額外的功能藤滥,使得復(fù)雜操作更容易鳖粟。例如,可以使用 [ 運(yùn)算符按組對(duì)數(shù)據(jù)進(jìn)行匯總:
dt[, mean(x), by = "y"]
y V1
1: a 1.5
2: b 3.5
3: c 5.5
1.7 重要的mlr3實(shí)用工具
Sugar函數(shù) mlr3中的大多數(shù)對(duì)象都可以通過(guò)稱(chēng)為Sugar函數(shù)的便捷函數(shù)創(chuàng)建拙绊。它們提供了常見(jiàn)代碼習(xí)慣的快捷方式向图,減少了用戶(hù)需要編寫(xiě)的代碼量泳秀。本書(shū)中我們大量使用Sugar函數(shù),并給出了完整的“全稱(chēng)”以獲得完整的細(xì)節(jié)榄攀。在大多數(shù)情況下嗜傅,Sugar函數(shù)將實(shí)現(xiàn)您想要執(zhí)行的操作,只有在編寫(xiě)自定義對(duì)象或擴(kuò)展時(shí)才需要考慮使用完整的R6代碼檩赢。例如吕嘀,lrn(“regr.rpart”)是LearnerRegrRpart $ new()的Sugar版本。
字典 mlr3使用字典來(lái)存儲(chǔ)學(xué)習(xí)器或任務(wù)等對(duì)象贞瞒。這些是鍵值存儲(chǔ)偶房,允許將鍵與值關(guān)聯(lián)起來(lái),值可以是R6對(duì)象军浆,就像紙質(zhì)字典將單詞與它們的定義關(guān)聯(lián)起來(lái)一樣棕洋。通常,通過(guò)Sugar函數(shù)訪問(wèn)字典中的值乒融,這些函數(shù)自動(dòng)使用適用的字典掰盘,而無(wú)需用戶(hù)指定;只需要指定要檢索的鍵即可。字典用于分組相關(guān)對(duì)象赞季,以便可以輕松地列出和檢索它們愧捕。例如,可以直接從mlr_learners字典中使用鍵“classif.featureless”檢索學(xué)習(xí)器(mlr_learners $ get(“classif.featureless”))申钩,并且可以使用as.data.table(mlr_learners)獲取所有存儲(chǔ)的學(xué)習(xí)器的概述次绘。
mlr3viz mlr3viz是mlr3生態(tài)系統(tǒng)中所有繪圖功能的包。該包使用常見(jiàn)主題(ggplot2 :: theme_minimal())典蜕,使所有生成的圖表具有類(lèi)似的美學(xué)断盛。在幕后罗洗,mlr3viz使用ggplot2愉舔。mlr3viz擴(kuò)展了fortify和autoplot,用于與Prediction伙菜,Learner和Benchmark對(duì)象一起使用的常見(jiàn)mlr3輸出(這些對(duì)象將在下一章中介紹和涵蓋)轩缤。 mlr3viz的最常見(jiàn)用法是autoplot()函數(shù),其中傳遞的對(duì)象類(lèi)型決定了繪圖類(lèi)型贩绕。繪圖類(lèi)型記錄在可通過(guò)火的?autoplot.X訪問(wèn)的各自手冊(cè)頁(yè)面中。例如淑倾,可以通過(guò)運(yùn)行馏鹤?autoplot.TaskRegr找到回歸任務(wù)的圖表文檔。