【R機器學(xué)習(xí):mlr3verse技術(shù)手冊】II 圖學(xué)習(xí)器

2 圖學(xué)習(xí)器
mlr3pipelines
包提供了強大的機器學(xué)習(xí)管道技術(shù)。
一個管道運算(PipeOp
),表示機器學(xué)習(xí)管道中的一個計算步驟。一系列的PipeOps
通過邊連接(%>>%
)構(gòu)成圖(Graph
),圖可以是簡單的線性圖,也可以是復(fù)雜的非線性圖。
這讓我們可以像搭建積木一樣,搭建出復(fù)雜的圖Graph
,數(shù)據(jù)將沿著搭建好的圖流動,完成從預(yù)處理到機器學(xué)習(xí)算法構(gòu)成的整個過程。
搭建圖學(xué)習(xí)器非常簡單:
用
po()
獲取PipeOp
? ? ? ? - 通過連接符%>>%
連接Graphs
與PipeOps
:

通過
gunion()
將Graphs
與PipeOps
并起來:

用ppl("replicate", graph, n)
將Graph
或PipeOps
復(fù)制?n?份并起來:

Graph$plot()
繪制圖的結(jié)構(gòu)關(guān)系;as_learner(Graph)
將圖轉(zhuǎn)化為學(xué)習(xí)器,即可跟普通學(xué)習(xí)器一樣使用。
管道、圖學(xué)習(xí)器的主要用于:
特征工程:缺失值插補、特征提取、特征選擇、處理不均衡數(shù)據(jù)……
集成學(xué)習(xí):裝袋法、堆疊法
分支訓(xùn)練、分塊訓(xùn)練
2.1 線性圖

搭建圖
可視化圖

轉(zhuǎn)化為圖學(xué)習(xí)器
訓(xùn)練任務(wù)

調(diào)試圖
- 取出或設(shè)置圖學(xué)習(xí)器超參數(shù):
- 獲取單獨PipeOp
的$state
(經(jīng)過$train()
后)


- 查看圖的中間結(jié)果:$.result
(需提前設(shè)置$keep_results = TRUE
)

2.2 非線性圖
非線性圖,可以類似下圖這樣自由搭建:

搭建非線性圖,需要用到多輸入多輸出的PipeOps
:

2.2.1 分支
集成學(xué)習(xí)的裝袋法、堆疊法都是非線性圖(見下節(jié)),另一種非線性圖是分支:即只執(zhí)行若干條備選路徑中的一條:


2.2.2 分塊訓(xùn)練
在數(shù)據(jù)太大,無法載入內(nèi)存的情況下,一個常用的技術(shù)是將數(shù)據(jù)分成幾塊,然后分別對各塊數(shù)據(jù)進(jìn)行訓(xùn)練,之后再用PipeOpClassifAvg
或PipeOpRegrAvg
將模型按加權(quán)平均匯總。
例如,用PipeOpChunk
將數(shù)據(jù)分成 4 塊,然后復(fù)制 4 個決策樹學(xué)習(xí)器, 在每個分塊的數(shù)據(jù)上進(jìn)行訓(xùn)練,再用PipeOpClassifAvg
將 4 個不同模型的預(yù)測結(jié)果匯總成一個結(jié)果:

轉(zhuǎn)化為圖學(xué)習(xí)器,與學(xué)習(xí)器一樣使用:
2.3 集成學(xué)習(xí)
集成學(xué)習(xí),是通過構(gòu)建多個基學(xué)習(xí)器,并按一定策略結(jié)合成強學(xué)習(xí)器來完成學(xué)習(xí)任務(wù),即所謂“博采眾長”,最終效果是優(yōu)于任何一個原學(xué)習(xí)器。集成學(xué)習(xí)可用于分類/回歸集成、特征選擇集成、異常值檢測集成等。
這多個基學(xué)習(xí)器可以是同質(zhì)的,比如都用決策樹或都用神經(jīng)網(wǎng)絡(luò),以Bagging
和Boosting
模式為代表;也可以是異質(zhì)的,即采用不同的算法,以Stacking
模式為代表。
2.3.1 裝袋法(Bagging)
Bagging
采用的是并行機制,即基學(xué)習(xí)器的訓(xùn)練之間沒有前后順序可以同時進(jìn)行。
Bagging
是用“有放回”抽樣(Bootstrap
法)的方式抽取訓(xùn)練集,對于包含?mm?個樣本的訓(xùn)練集,進(jìn)行 m?次有放回的隨機抽樣操作,得到樣本子集(有重復(fù))中有接近?36.8%?的樣本沒有被抽到。
按照同樣的方式重復(fù)進(jìn)行,就可以采集到 T 個包含 m 個樣本的數(shù)據(jù)副本,從而訓(xùn)練出?T?個基學(xué)習(xí)器。
最終對這 T 個基學(xué)習(xí)器的輸出進(jìn)行結(jié)合,分類問題就采用“多數(shù)決”,回歸問題就采用“取平均”。

以手工搭建一個簡易的隨機(裝袋)森林模型為例:
可視化結(jié)構(gòu)關(guān)系:

轉(zhuǎn)化為圖學(xué)習(xí)器,即可與普通學(xué)習(xí)器一樣使用:
2.3.2 提升法(Boosting)
Boosting
采用的是串行機制,即基學(xué)習(xí)器的訓(xùn)練存在依賴關(guān)系,按次序一一進(jìn)行訓(xùn)練(實現(xiàn)上可以做到并行)。
基本思想:基模型的訓(xùn)練集按照某種策略每次都進(jìn)行一定的轉(zhuǎn)化,對所有基模型預(yù)測的結(jié)果進(jìn)行線性合成產(chǎn)生最終的預(yù)測結(jié)果。

從偏差-方差分解來看,Boosting
算法主要關(guān)注于降低偏差,每輪的迭代都關(guān)注于訓(xùn)練過程中預(yù)測錯誤的樣本,將弱學(xué)習(xí)器提升為強學(xué)習(xí)器。
Boosting
法是一些現(xiàn)成的機器學(xué)習(xí)算法為代表,如AdaBoost, GBDT, XGboost, LightGBM, catBoost
等。
2.3.3 堆疊法(Stacking)
Stacking
法,采用的是分階段機制,將若干基模型的輸出作為輸入,再接一層主學(xué)習(xí)器,得到最終的預(yù)測。
將訓(xùn)練好的所有基模型對訓(xùn)練集進(jìn)行預(yù)測,第 j 個基模型對第?i?個訓(xùn)練樣本的預(yù)測值將作為新的訓(xùn)練集中第 i 個樣本的第?j?個特征值,最后基于新的訓(xùn)練集進(jìn)行訓(xùn)練。同理,預(yù)測的過程也要先經(jīng)過所有基模型的預(yù)測形成新的測試集,最后再對測試集進(jìn)行預(yù)測。

用于堆疊的基模型通常采用不同的模型,作用在相同的訓(xùn)練集上。
為了充分利用數(shù)據(jù),Stacking
通常采用?k?折交叉訓(xùn)練法(類似 k 折交叉驗證):每個基學(xué)習(xí)器分別在各個 k-1 折數(shù)據(jù)上訓(xùn)練,在其剩下的?1?折數(shù)據(jù)上預(yù)測,就可以得到對任意?1?折數(shù)據(jù)的預(yù)測結(jié)果,進(jìn)而用于訓(xùn)練主模型。
例如,訓(xùn)練線性回歸和支持向量機模型,并將其預(yù)測結(jié)果特征與原始特征結(jié)合起來,再在其上訓(xùn)練一個主模型隨機森林。
為了防止過擬合,不是用基學(xué)習(xí)器對原數(shù)據(jù)整體上的進(jìn)行預(yù)測,而是用交叉法對折外數(shù)據(jù)進(jìn)行預(yù)測:PipeOpLearnerCV
對訓(xùn)練數(shù)據(jù)進(jìn)行嵌套交叉訓(xùn)練,對每折擬合一個模型。然后,每個模型都用來預(yù)測其折外的數(shù)據(jù)。因此,獲得了對輸入數(shù)據(jù)中所有數(shù)據(jù)點的預(yù)測。
首先創(chuàng)建一個“0級”學(xué)習(xí)器,用來提取較低級別的預(yù)測特征。任務(wù)通過"nop" 管道,相當(dāng)于原始特征不做改變直接發(fā)送到下一級,與線性回歸、支持向量機學(xué)習(xí)器的預(yù)測結(jié)果特征通過featureunion
管道相結(jié)合,之后再接上主學(xué)習(xí)器隨機森林。
可視化結(jié)構(gòu)關(guān)系:

轉(zhuǎn)化為圖學(xué)習(xí)器,即可與普通學(xué)習(xí)器一樣使用:
一個更復(fù)雜的圖學(xué)習(xí)器嵌套重抽樣超參數(shù)調(diào)參的實例見 5.4。
參考文獻(xiàn)
Marc Becker et al. mlr3book. 2022.
Marc Becker et al. mlr3 Gallery. 2021.
Bernd Bischl et al. Machine Learning Pipelines in R. 2021.
Martin Binder et al. mlr3pipelines: Preprocessing Operators and Pipelines for mlr3. 2022.

我正在寫一本《R機器學(xué)習(xí):基于mlr3verse》的書,其中的mlr3verse
技術(shù)篇草稿,歡迎您的閱讀品鑒和轉(zhuǎn)發(fā)擴(kuò)散(但禁止用于任何出版)!
想提前學(xué)習(xí)本書內(nèi)容,也可以關(guān)注我的?2023年寒假“R機器學(xué)習(xí)(基于mlr3verse)”培訓(xùn)班,邀請函鏈接:提取碼:xxul
https://pan.baidu.com/s/1_SaYPebqhnXoxDT8W9tjJA?pwd=xxul
另外,我在第15屆中國R會上做的報告,相當(dāng)于是?mlr3verse
技術(shù)手冊?的整體略講:
張敬信 第15屆R會報告-R機器學(xué)習(xí):mlr3verse核心工作流https://www.zhihu.com/zvideo/1579758441576534016
講座 PPT?以及?R機器學(xué)習(xí):mlr3verse技術(shù)手冊,可到我的 Gitee/Github下載:
https://gitee.com/zhjx19/rconf15
https://github.com/zhjx19/RConf15