張 寧
(中國(guó)石化集團(tuán)國(guó)際石油勘探開發(fā)有限公司,北京 100101)
數(shù)據(jù)缺失是一種常見的現(xiàn)象,如機(jī)器學(xué)習(xí)中的UCI數(shù)據(jù)集超過(guò)40%都有數(shù)據(jù)缺失[1]。數(shù)據(jù)缺失將減少樣本信息,使有價(jià)值的信息被忽略,增加了分析數(shù)據(jù)的難度,可能會(huì)導(dǎo)致數(shù)據(jù)決策偏差[2]。
目前具有很多填補(bǔ)缺失值的算法?;诮y(tǒng)計(jì)學(xué)的填補(bǔ)方法包括使用均值填充缺失值[3],使用上一次的觀察值來(lái)填充缺失值[4],使用眾數(shù)來(lái)填充缺失值[5]。這些基于統(tǒng)計(jì)值的填充方法僅僅考慮了原式數(shù)據(jù)集的共性,并沒有考慮每個(gè)樣本獨(dú)立的特性。常見的填補(bǔ)方法可以分為兩類:鑒別和生成。鑒別方法包括MICE[6]、MissForest[7],Matrix Completion[8];生成法包括基于深度學(xué)習(xí)的GAN[9-11]。然而目前的生成式填補(bǔ)算法存在著一些缺點(diǎn),該類方法需要處理的數(shù)據(jù)滿足一定的先驗(yàn)分布,當(dāng)數(shù)據(jù)中含有混合類別和連續(xù)變量時(shí),其泛化能力就會(huì)很差[12-13]。
本文提出一種新穎的缺失數(shù)據(jù)填補(bǔ)方法,主要構(gòu)建了一個(gè)生成對(duì)抗填補(bǔ)網(wǎng)絡(luò)(簡(jiǎn)稱GAIN)完成填補(bǔ)缺失數(shù)據(jù)的過(guò)程。在GAIN中,生成器的目標(biāo)是精確填補(bǔ)缺失的數(shù)據(jù),判別器的目標(biāo)是準(zhǔn)確地分辨數(shù)據(jù)是填補(bǔ)的還是真實(shí)的。所以判別器要最小化分類誤差率,而生成器要最大化判別器的分類誤差率,這樣兩者就處在了一種相互對(duì)抗的過(guò)程中。同時(shí)為了使這個(gè)對(duì)抗過(guò)程得到更加理想的結(jié)果,還為判別器提供了關(guān)于數(shù)據(jù)的部分隱含信息,逼迫生成器生成的樣本接近于真實(shí)的數(shù)據(jù)分布[12]。
為了方便后續(xù)的公式推導(dǎo),首先對(duì)一些符號(hào)進(jìn)行說(shuō)明。認(rèn)為χ:χ=χ1×···×χd是一個(gè)d維空間。假設(shè)X:X=(X1,···,Xd)是χ的一個(gè)隨機(jī)變量,本文稱其為數(shù)據(jù)向量。假設(shè)M:M=(M1···Md)表示取值{0,1}的隨機(jī)變量,本文將其稱為掩模向量。M反映了哪些變量是觀察數(shù)據(jù),哪些是填補(bǔ)的數(shù)據(jù)。本文定義一個(gè)新空間,i=1,2,···,d,其中*表示不在χ任何一維空間χi中的數(shù)據(jù)。定義表示新生成的d維空間。定義一個(gè)新的隨機(jī)變量:
圖1展示了本文提出的GAIN網(wǎng)絡(luò)架構(gòu)。
G將、M和Z作為輸入,Xˉ作為輸出。其中Z是一個(gè)d維的噪聲變量,獨(dú)立于所有的變量。這一部分與標(biāo)準(zhǔn)的GAN非常的類似,輸入噪聲變量。本文定義兩個(gè)隨機(jī)變量,,如下所示:
這里⊙表示同位元素相乘;表示填補(bǔ)值的向量,不含已觀察到的數(shù)據(jù)部分,這里需要注意的是,G會(huì)為每一部分都輸出一個(gè)值,即使有些部分不是缺失的;表示填補(bǔ)后完整的數(shù)據(jù)向量,它觀察局部信息,然后用X中的估算值代替對(duì)應(yīng)位置的*得到。
因?yàn)镸中的值(0,1)指示了數(shù)據(jù)中哪些部分是缺失的,哪些部分是可以被觀察到的。本文使用相同尺寸的單位矩陣與M相減,0和1的位置互換,就顯示了哪些部分是需要進(jìn)行估的,所以在的表達(dá)式中(1-M)⊙Z表示了使用隨機(jī)噪聲Z來(lái)填補(bǔ)缺失的部分。(1-M)⊙Z代替Z是為了告訴Z在中哪些部分是需要使用噪聲進(jìn)行填充的。
這部分將介紹Discriminator (D),和標(biāo)準(zhǔn)的GAN一樣,D被用來(lái)作為一個(gè)對(duì)抗者訓(xùn)練G。但是與標(biāo)準(zhǔn)的GAN中的D存在一些不同。標(biāo)準(zhǔn)G生成的結(jié)果要么全是真實(shí)的,要么全是假的,D給出的判斷結(jié)果也要么是真要么是假。GAIN框架中的G生成的結(jié)果有些部分是真實(shí)的,有些部分是生成的;G也不再是識(shí)別整個(gè)向量的真假,而是嘗試判別哪些部分是真的,哪些部分是生成的。這就相當(dāng)于預(yù)測(cè)M中m的值。D的輸入是和H,輸出是表示每個(gè)的成分是觀察數(shù)據(jù)的概率。
提示機(jī)制(H)在標(biāo)準(zhǔn)GAN的結(jié)構(gòu)中不存在,也是GAIN結(jié)構(gòu)的核心組成部分。它是一個(gè)由用戶自己定義的隨機(jī)變量,強(qiáng)化了G和D的對(duì)抗過(guò)程。H中的元素h依賴于分布H|M=m,將其輸入到D中。根據(jù)和H,中的值就反應(yīng)了它是真實(shí)數(shù)據(jù)的概率。H由于是認(rèn)為定義的,所以H定義的不同,那么給D的提示信息就不同,從而可以訓(xùn)練出具有多個(gè)分布的G,根據(jù)D的結(jié)果來(lái)選擇最優(yōu)的那一個(gè)。
通過(guò)最大化正確預(yù)測(cè)M的概率來(lái)訓(xùn)練D,通過(guò)最小化D能正確預(yù)測(cè)M的概率來(lái)訓(xùn)練G。與標(biāo)準(zhǔn)GAN類似,評(píng)估函數(shù)如下:
圖1 GAIN架構(gòu)圖Fig.1 Structure diagram of GAIN
因此GAIN的目標(biāo)就是:
由于對(duì)于判別器來(lái)說(shuō)這就是一個(gè)簡(jiǎn)單的二分類問題,所以這里就使用交叉熵來(lái)定義損失函數(shù),如下所示:
其中ai表示D預(yù)測(cè)結(jié)果矩陣中的元素,bi表示對(duì)應(yīng)于ai的M中的元素。本文定義,則目標(biāo)函數(shù)就轉(zhuǎn)換成了D能否正確預(yù)測(cè)M的函數(shù)。
本文定義隨機(jī)變量B=(B1,···,Bd)∈{0,1}d,從{1,···,d}均勻隨機(jī)的采樣k個(gè)值然后設(shè)置:
對(duì)于給定的M、h的取值為{1,0.5,0},定義為:
判別器D的訓(xùn)練過(guò)程。固定一個(gè)G和小批次的kD,首先從數(shù)據(jù)集中抽樣kD個(gè)樣本x?(j)和對(duì)應(yīng)的m(j),從Z和B中抽樣kD個(gè)樣本z(j)和b(j),然后根據(jù)公式計(jì)算x?(j)和h(j)。當(dāng)G固定的時(shí)候,D的唯一輸出就是對(duì)應(yīng)于每個(gè)樣本的bi=0的部分,定義關(guān)于D的損失函數(shù):
D根據(jù)以下的準(zhǔn)則來(lái)訓(xùn)練:
生成器G的訓(xùn)練過(guò)程。使用最新訓(xùn)練過(guò)的D,以小批次的kG來(lái)進(jìn)行訓(xùn)練。G實(shí)際上輸出是一個(gè)包含所有數(shù)據(jù)的向量,因此在G的訓(xùn)練過(guò)程中,本文不僅要使缺失地方(mi=0)填補(bǔ)的值成功騙過(guò)D,還要保證真實(shí)被觀察的數(shù)據(jù)(mi=1)的輸出也要接近真實(shí)值。于是本文定義兩個(gè)損失函數(shù),第一個(gè)損失函數(shù)LG:{0,1}d×[0,1]d×{0,1}d→R如下所示:
LG用來(lái)描述數(shù)據(jù)缺失的部分(mi=0),它用來(lái)評(píng)估填補(bǔ)的質(zhì)量,它的值越小,表示mi=0被D判別為mi=1的概率越接近1。
其中
LM用來(lái)描述數(shù)據(jù)觀察的部分(mi=1)表示重建誤差,用來(lái)評(píng)估真實(shí)觀察值經(jīng)過(guò)G的輸出與真實(shí)值的差距。它的值越小,說(shuō)明重構(gòu)后的值越接近真實(shí)值。因此,本文可以使用一個(gè)完整的損失函數(shù)評(píng)估訓(xùn)練過(guò)程:
其中α 是一個(gè)超參數(shù)。
在本節(jié)中,本文將使用公開數(shù)據(jù)集和真實(shí)數(shù)據(jù)集驗(yàn)證GAIN的填補(bǔ)性能。首先,本文使用4種公開UCI數(shù)據(jù)集來(lái)驗(yàn)證GAIN的性能。進(jìn)一步地,本文使用來(lái)自石油行業(yè)的真實(shí)鉆井液數(shù)據(jù)集來(lái)驗(yàn)證GAIN方法的有效性。
本文每個(gè)實(shí)驗(yàn)進(jìn)行10次,在每個(gè)實(shí)驗(yàn)中使用10折交叉驗(yàn)證,分類準(zhǔn)確率作為性能指標(biāo)。分類準(zhǔn)確率A定義為:
式中:P為被模型預(yù)測(cè)為正的正樣本;Q為被模型預(yù)測(cè)為負(fù)的負(fù)樣本;R為被模型預(yù)測(cè)為負(fù)的正樣本;S為被模型預(yù)測(cè)為正的負(fù)樣本。
本文使用4個(gè)UCI公共機(jī)器學(xué)習(xí)數(shù)據(jù)集 (Falre、Abalone、WineQuality、CMC)分別來(lái)驗(yàn)證GAIN的填補(bǔ)性能。首先,將數(shù)據(jù)集隨機(jī)選取30%設(shè)置為缺失值(用0表示缺失值),之后將該數(shù)據(jù)集平分為數(shù)據(jù)集A和數(shù)據(jù)集B。然后,將數(shù)據(jù)集A分為訓(xùn)練集(70%)和測(cè)試集(30%)來(lái)訓(xùn)練模型,模型訓(xùn)練完畢過(guò)后,將帶缺失值的數(shù)據(jù)集B使用GAIN進(jìn)行填補(bǔ),生成填補(bǔ)數(shù)據(jù)集C,最后,使用分類算法在填補(bǔ)數(shù)據(jù)集C和帶缺失的數(shù)據(jù)集B上驗(yàn)證填補(bǔ)效果,分類方法選用LightGBM和XGBoost。
本節(jié)實(shí)驗(yàn)過(guò)程為:每個(gè)實(shí)驗(yàn)做10次,每次使用10折交叉驗(yàn)證,將10次實(shí)驗(yàn)的平均值作為最后的分類結(jié)果,使用GAIN方法填補(bǔ)后的數(shù)據(jù)集與填補(bǔ)前的數(shù)據(jù)集在分類任務(wù)上的性能對(duì)比分別見表1和表2所示。從表1和表2可以看出使用GAIN填補(bǔ)數(shù)據(jù)過(guò)后分類精度都得到了提升。
各個(gè)數(shù)據(jù)集在不同的缺失率的填補(bǔ)性能見圖2和圖3。在Falre、Abalone、WineQuality、CMC這4個(gè)數(shù)據(jù)集的不同數(shù)據(jù)缺失率的情況下,經(jīng)過(guò)填補(bǔ)過(guò)后的數(shù)據(jù)使用LightGBM和XGBoost兩個(gè)方法進(jìn)行分類。虛線為使用GAIN填補(bǔ)過(guò)后的數(shù)據(jù)進(jìn)行分類的結(jié)果,實(shí)線為缺失數(shù)據(jù)進(jìn)行分類的結(jié)果。
從圖3可以看出使用GAIN填補(bǔ)過(guò)后的數(shù)據(jù),比直接使用帶有缺失值的數(shù)據(jù)做分類精度更好。
本節(jié)實(shí)驗(yàn)將與當(dāng)前流行的缺失值填補(bǔ)算法MICE[6]、MissForest[7]、Matrix[14]、EM[15]相比較,來(lái)驗(yàn)證本文提出的算法的有效性,分類算法使用XGBoost,每個(gè)數(shù)據(jù)集的缺失率設(shè)置為30%。見表3所示,本文提出的算法在不同的數(shù)據(jù)集上分類效果更好,驗(yàn)證了本文所提算法的有效性。
表1 分類任務(wù)的精度對(duì)比(LightGBM)Table1 Accuracy comparison of classification tasks(LightGBM)
表2 分類任務(wù)的精度對(duì)比(XGBoost)Table2 Accuracy comparison of classification tasks(XGBoost)
圖2 不同缺失率的分類性能Fig.2 Classification performance with different missing ratios
圖3 不同缺失率的分類效果Fig.3 Classification performance with different missing ratios
表3 不同填補(bǔ)算法的精度對(duì)比Table3 Accuracy comparison with other methods
本節(jié)在真實(shí)鉆井液數(shù)據(jù)集上驗(yàn)證GAIN的有效性,該數(shù)據(jù)集收集有2 000個(gè)鉆井液體系使用案例,這些案例中涵蓋32種鉆井液體系,數(shù)據(jù)集的缺失率設(shè)置為30%,實(shí)驗(yàn)?zāi)康氖球?yàn)證GAIN在該數(shù)據(jù)集上的鉆井液體系分類精度。本節(jié)選用了主流的四種分類方法:LightGBM、XGBoost、SVM和BP神經(jīng)網(wǎng)絡(luò)。本節(jié)實(shí)驗(yàn)過(guò)程為:每個(gè)實(shí)驗(yàn)做10次,每次使用10折交叉驗(yàn)證,將10次實(shí)驗(yàn)的平均值作為最后的分類結(jié)果,四種分類方法的平均精度見表4所示。
從圖4可以看出使用GAIN填補(bǔ)過(guò)后鉆井液數(shù)據(jù)在四種分類方法的平均精度比未經(jīng)過(guò)GAIN填補(bǔ)的都好,精度在LightGBM、XGBoost、SVM和BP神經(jīng)網(wǎng)絡(luò)上分別提升了1.42%、1.03%、0.29%和1.88%。實(shí)驗(yàn)結(jié)果也表明GAIN方法在真實(shí)鉆井液數(shù)據(jù)集上同樣有效,具備一定的普適性和實(shí)際應(yīng)用價(jià)值。
表4 在真實(shí)鉆井液數(shù)據(jù)集分類任務(wù)的精度對(duì)比Table4 Accuracy comparison of classification tasks on real drilling fluid datasets
圖4 不同缺失率在鉆井液數(shù)據(jù)集上的分類效果Fig.4 Classification performance with different missing ratios of drilling fluid datasets
本節(jié)實(shí)驗(yàn)將與當(dāng)前流行的缺失值填補(bǔ)算法MICE、MissForest、Matrix、EM相比較,來(lái)驗(yàn)證本文提出的算法的有效性,分類算法使用XGBoost (表5),GAIN在鉆井液數(shù)據(jù)集上效果依舊是最好的,表明本文的算法的有效性。
表5 不同填補(bǔ)算法的精度對(duì)比Table5 Accuracy comparison with other methods on real drilling fluid datasets
數(shù)據(jù)缺失是一種很普遍的現(xiàn)象,有時(shí)數(shù)據(jù)本身就很難獲取,有的由于采集設(shè)備的不穩(wěn)定性或者被干擾等原因,采集到的數(shù)據(jù)往往是不完整的,而數(shù)據(jù)的缺失部分則阻礙了對(duì)數(shù)據(jù)的深入分析,由此帶來(lái)數(shù)據(jù)決策偏差等問題。本文提出基于一種生成對(duì)抗填補(bǔ)網(wǎng)絡(luò)方法來(lái)對(duì)缺失數(shù)據(jù)進(jìn)行填補(bǔ)。公開數(shù)據(jù)集和真實(shí)數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果驗(yàn)證了本文方法的有效性,在公開UCI數(shù)據(jù)集和真實(shí)鉆井液數(shù)據(jù)集上性能良好,顯著優(yōu)于填補(bǔ)前的數(shù)據(jù)集。基于本文方法開發(fā)了石油領(lǐng)域應(yīng)用軟件,展示了本文方法具備一定的推廣應(yīng)用價(jià)值。