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