【R機(jī)器學(xué)習(xí):mlr3verse技術(shù)手冊】III 特征工程① 缺失值插補(bǔ)

3 特征工程
機(jī)器學(xué)習(xí)中的數(shù)據(jù)預(yù)處理,通常也統(tǒng)稱為特征工程,主要包括:缺失值插補(bǔ)、特征變換,目的是提升模型性能。
3.1 特征工程概述
用?mlr3pipelines?
包實(shí)現(xiàn)特征工程:
選擇特征工程步相應(yīng)的?
PipeOp
;多個(gè)特征工程步通過管道符
%>>%
連接;很多
PipeOp
都支持affect_columns
參數(shù),接受Selector
選擇器函數(shù)(接受Task
)以選擇該PipeOp
影響的列:selector_all()
: 選擇所有特征;selector_none()
: 不選擇任何特征;selector_type(types)
: 根據(jù)類型來選擇特征:"logical", "integer", "numeric", "character", "factor", "ordered", "POSIXct";selector_grep(pattern)
: 根據(jù)正則表達(dá)式匹配(特征名字)選擇特征;selector_name(feature_names)
: 根據(jù)特征名字選擇特征;selector_invert(selector)
: 選擇某選擇器的反選特征;selector_intersect/union/setdiff(selector_x, selector_y)
: 選擇兩個(gè)選擇器特征的交/并/差集;selector_missing()
: 選擇包含缺失值的特征;selector_cardinality_greater_than(min_cardinality)
: 選擇分類特征的基數(shù)大于指定閾值的特征。

幫助:?PipeOp
以“標(biāo)準(zhǔn)化”管道為例,其$train()
方法接受訓(xùn)練數(shù)據(jù),做標(biāo)準(zhǔn)化處理輸出變換后的數(shù)據(jù),同時(shí)訓(xùn)練好了“標(biāo)準(zhǔn)化”參數(shù)(均值、標(biāo)準(zhǔn)差)將作為狀態(tài)$state
保存下來;其$predict()
方法,用保存好的狀態(tài)參數(shù)對新數(shù)據(jù)做同樣的變換。
下面看一個(gè)具體的例子:

特征工程管道的兩種用法:
(1) 調(diào)試:查看特征工程步對輸入數(shù)據(jù)做了什么
訓(xùn)練特征工程管道:提供任務(wù),訪問特征工程之后的數(shù)據(jù):

將訓(xùn)練好的特征工程管道,用于新數(shù)據(jù):
(2) 用于機(jī)器學(xué)習(xí):再接一個(gè)學(xué)習(xí)器,轉(zhuǎn)化成圖學(xué)習(xí)器(和普通學(xué)習(xí)器一樣使用)


3.2 缺失值插補(bǔ)
目前支持的插補(bǔ)方法:

3.2.1 簡單插補(bǔ)
用某常數(shù)、均值、中位數(shù)、眾數(shù)插補(bǔ)



3.2.2 隨機(jī)抽樣插補(bǔ)
通過從非缺失的訓(xùn)練數(shù)據(jù)中隨機(jī)抽樣來插補(bǔ)特征

3.2.3 直方圖法插補(bǔ)
用直方圖法插補(bǔ)數(shù)值特征

3.2.4 學(xué)習(xí)器插補(bǔ)
通過為每個(gè)特征擬合一個(gè)學(xué)習(xí)器來插補(bǔ)特征
使用參數(shù)context_columns
所指示的特征作為特征來訓(xùn)練插補(bǔ)學(xué)習(xí)器。注意該參數(shù)是PipeOpImpute
基類的一部分。
此外,只有學(xué)習(xí)器支持的特征可以被插補(bǔ);即regr
類型的學(xué)習(xí)器只能插補(bǔ)整數(shù)和數(shù)值特征,而classif
可以插補(bǔ)因子、有序因子和邏輯值特征。
用于插補(bǔ)的學(xué)習(xí)器是在所有的context_columns
上訓(xùn)練的;如果這些列包含缺失值,學(xué)習(xí)器通常需要能夠自己處理缺失值,或者需要做自我插補(bǔ)。
決策樹插補(bǔ)

KNN 插補(bǔ),訓(xùn)練 KNN 學(xué)習(xí)器時(shí),先用直方圖法插補(bǔ)

3.2.5 超出范圍插補(bǔ)
通過增加一個(gè)新的水平 ".MISSING" 來插補(bǔ)因子特征。
通過使用min(x)?offset?multiplier?diff(range(x)
或max(x) + offset + multiplier * diff(range(x))
,移到最小值以下或最大值以上的常量值插補(bǔ)數(shù)值特征。
該插補(bǔ)法在基于樹的模型中尤其合理。


另外,跟缺失值相關(guān)的特征工程還有po("missind")
:在任務(wù)中增加是否缺失指示列(刪除原始特征),通常與PipeOpFeatureUnion
和各插補(bǔ)PipeOps
結(jié)合使用。
注意,affect_columns
是用selector_invert(selector_type(c("factor", "ordered", "character"))
初始化的,因?yàn)橐蜃恿械娜笔е低ǔJ怯贸龇秶牟逖a(bǔ)(PipeOpImputeOOR
)。
注:當(dāng)然也可以在mlr3
框架外面,單獨(dú)對數(shù)據(jù)做缺失值插補(bǔ),再用來創(chuàng)建任務(wù)。
參考文獻(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機(jī)器學(xué)習(xí):基于mlr3verse》的書,其中的mlr3verse
技術(shù)篇草稿,歡迎您的閱讀品鑒和轉(zhuǎn)發(fā)擴(kuò)散(但禁止用于任何出版)!
想提前學(xué)習(xí)本書內(nèi)容,也可以關(guān)注我的?2023年寒假“R機(jī)器學(xué)習(xí)(基于mlr3verse)”培訓(xùn)班,邀請函鏈接:提取碼:xxul
https://pan.baidu.com/s/1_SaYPebqhnXoxDT8W9tjJA?pwd=xxul
另外,我在第15屆中國R會上做的報(bào)告,相當(dāng)于是?mlr3verse
技術(shù)手冊?的整體略講:
張敬信 第15屆R會報(bào)告-R機(jī)器學(xué)習(xí):mlr3verse核心工作流https://www.zhihu.com/zvideo/1579758441576534016
講座 PPT?以及?R機(jī)器學(xué)習(xí):mlr3verse技術(shù)手冊,可到我的 Gitee/Github下載:
https://gitee.com/zhjx19/rconf15
https://github.com/zhjx19/RConf15