博客專欄

EEPW首頁 > 博客 > 超干!Gain 算法實(shí)現(xiàn)缺失值預(yù)測(cè)

超干!Gain 算法實(shí)現(xiàn)缺失值預(yù)測(cè)

發(fā)布人:AI科技大本營 時(shí)間:2022-06-19 來源:工程師 發(fā)布文章
作者 | 李秋鍵

出品 | AI科技大本營(ID:rgznai100)

隨著計(jì)算機(jī)和信息技術(shù)的快速發(fā)展,大數(shù)據(jù)和人工智能技術(shù)表現(xiàn)出越來越好的發(fā)展前景。數(shù)據(jù)在互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、醫(yī)療、金融等諸多領(lǐng)域迅速累積,形成大規(guī)模數(shù)據(jù)時(shí)代。大數(shù)據(jù)和人工智能技術(shù)相輔相成,一方面數(shù)據(jù)是人工智能算法做出決策的基礎(chǔ),另一方面數(shù)據(jù)也需要人工智能算法實(shí)現(xiàn)其價(jià)值。高質(zhì)量的數(shù)據(jù)是實(shí)現(xiàn)人工智能、數(shù)據(jù)挖掘等技術(shù)最原始的驅(qū)動(dòng)力,但是在現(xiàn)實(shí)世界中,許多數(shù)據(jù)集存在數(shù)據(jù)質(zhì)量問題。數(shù)據(jù)集來源于人工或機(jī)器的收集,即使是關(guān)系型數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù),也很容易存在數(shù)據(jù)缺失、數(shù)據(jù)冗余、數(shù)據(jù)不一致等問題。低質(zhì)量的數(shù)據(jù)不僅增加了算法設(shè)計(jì)的難度,還降低了算法分析結(jié)果的準(zhǔn)確性。因此,擁有高質(zhì)量的數(shù)據(jù)才是實(shí)現(xiàn)人工智能等算法的前提。在大數(shù)據(jù)等領(lǐng)域,數(shù)據(jù)預(yù)處理就是實(shí)現(xiàn)高質(zhì)量數(shù)據(jù)的過程,其包括數(shù)據(jù)清洗、數(shù)據(jù)集成、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)規(guī)約。不同的任務(wù)其數(shù)據(jù)集成、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)規(guī)約方式不同,但都離不開數(shù)據(jù)清洗。由此可見處理原始數(shù)據(jù),實(shí)現(xiàn)高質(zhì)量數(shù)據(jù)起著重要作用。

然而在數(shù)據(jù)處理過程中,經(jīng)常面臨數(shù)據(jù)缺失問題。例如,在問卷調(diào)查中,被調(diào)查人員由于遺漏或者涉及隱私而沒有填寫完整信息造成的數(shù)據(jù)缺失;在醫(yī)療系統(tǒng)中,由于患者沒有相關(guān)疾病或未經(jīng)過檢測(cè)而造成的部分?jǐn)?shù)據(jù)缺失;一些傳感器設(shè)備的故障造成的信息缺失,等等。這些在實(shí)際生活中面臨的切實(shí)問題不可避免,并且已經(jīng)成為亟待解決的數(shù)據(jù)質(zhì)量題。

故為了解決數(shù)據(jù)缺失值預(yù)測(cè)的問題,今天我們嘗試使用Gain算法訓(xùn)練深度學(xué)習(xí)模型,對(duì)其缺少的數(shù)據(jù)進(jìn)行匹配性的預(yù)測(cè),得到的訓(xùn)練均方根誤差如下圖可見,代碼放置文末:

圖片

圖片


圖片

常用缺失值處理方法


1.1 基于傳統(tǒng)統(tǒng)計(jì)學(xué)的方法


數(shù)據(jù)填補(bǔ)問題最早可歸類于統(tǒng)計(jì)學(xué)領(lǐng)域,其方法又可分為單一填補(bǔ)法和多重填補(bǔ)法。常用的單一填補(bǔ)法如均值填補(bǔ)法、眾數(shù)填補(bǔ)法、熱卡填補(bǔ)法、冷卡填補(bǔ)法、回歸填補(bǔ)法等。

均值填補(bǔ)是利用缺失值所在屬性列中存在值的均值填補(bǔ),在該屬性列中填補(bǔ)的缺失值都相等。均值填補(bǔ)法是針對(duì)數(shù)值型數(shù)據(jù),而眾數(shù)填補(bǔ)是針對(duì)離散型數(shù)據(jù),使用不完整屬性列中存在值的眾數(shù)填補(bǔ)該列中的缺失值。均值填補(bǔ)和眾數(shù)填補(bǔ)雖然簡(jiǎn)便,但是使填補(bǔ)值缺少了隨機(jī)性,損失了大量數(shù)據(jù)信息。


1.2 基于模型的方法


高斯混合模型是基于模型的填補(bǔ)方法的代表性方法,其求解通常采用 EM 算法,因此也被稱為 EM 填補(bǔ)法。EM 填補(bǔ)法假設(shè)數(shù)據(jù)集服從多元正態(tài)分布,且數(shù)據(jù)缺失為任意缺失模式,通過迭代模型和填補(bǔ)值的方式填補(bǔ)。


1.3 基于機(jī)器學(xué)習(xí)的方法


機(jī)器學(xué)習(xí)學(xué)科內(nèi)有已經(jīng)有多種方法被拓展在數(shù)據(jù)填補(bǔ)上,常見的包括 K 近鄰填補(bǔ)法、基于聚類的填補(bǔ)法、基于決策樹的填補(bǔ)法、基于神經(jīng)網(wǎng)絡(luò)的填補(bǔ)法等。KNN 算法在機(jī)器學(xué)習(xí)內(nèi)比較適用于數(shù)據(jù)的分類,算法從帶有標(biāo)簽的數(shù)據(jù)庫內(nèi)選取離待測(cè)試樣本最近鄰的 K 個(gè)樣本,通過統(tǒng)計(jì) K 個(gè)最近鄰樣本的標(biāo)簽來標(biāo)識(shí)測(cè)試樣本的類別。樣本之間的距離通常選取歐式距離、曼哈頓距離、閔可夫斯基距離等距離公式。KNN 算法用于填補(bǔ)數(shù)據(jù),通常會(huì)改進(jìn)樣本之間距離的計(jì)算公式,使其可以表示不完整樣本和完整樣本之間的距離。KNN 填補(bǔ)法通過選取和不完整樣本最近鄰的 K 個(gè)完整樣本,通過加權(quán)平均完整樣本的屬性值填補(bǔ)相應(yīng)的缺失值。

基于神經(jīng)網(wǎng)絡(luò)的填補(bǔ)法更是多種多樣,其常用的網(wǎng)絡(luò)結(jié)構(gòu)包括多層感知機(jī)、廣義回歸神經(jīng)網(wǎng)絡(luò)、自組織映射神經(jīng)網(wǎng)絡(luò)、多任務(wù)學(xué)習(xí)網(wǎng)絡(luò)等,每一種網(wǎng)絡(luò)都可以用來填補(bǔ)缺失值。

而本文使用的Gain算法就歸屬于神經(jīng)網(wǎng)絡(luò)中的一種,是基于GAN網(wǎng)絡(luò)的框架生成缺失數(shù)據(jù)。

其中系統(tǒng)流程圖如下:

圖片


圖片

項(xiàng)目搭建


Gain算法是由GAN網(wǎng)絡(luò)推廣而來,其中生成器用來準(zhǔn)確估算缺失數(shù)據(jù),判別器為判別預(yù)測(cè)值和真實(shí)值之間的誤差,從而更新生成器和判別器的參數(shù)。同樣按照GAN網(wǎng)絡(luò)基本原則,其基本目標(biāo)為尋找納什平衡點(diǎn),使其生成器和判別器loss相同得到最佳結(jié)果。項(xiàng)目整體過程分為數(shù)據(jù)集準(zhǔn)備、數(shù)據(jù)處理、以及網(wǎng)絡(luò)結(jié)構(gòu)搭建和模型訓(xùn)練,具體介紹如下:


2.1 訓(xùn)練數(shù)據(jù)集


這里使用的數(shù)據(jù)集為開源的UCI Spam數(shù)據(jù)和UCI Letter數(shù)據(jù)集,數(shù)據(jù)集內(nèi)容如下:

圖片


2.2 數(shù)據(jù)處理


按照數(shù)據(jù)集的不同,讀取對(duì)應(yīng)數(shù)據(jù)集,然后將其中為0的值填充為nan,為后續(xù)預(yù)測(cè)和模型訓(xùn)練做基本處理,對(duì)應(yīng)data_loader函數(shù)。然后對(duì)數(shù)據(jù)做基本的標(biāo)準(zhǔn)化處理,核心代碼如下:






















def normalization (data, parameters=None):  _, dim = data.shape  norm_data = data.copy()  if parameters is None:    min_val = np.zeros(dim)    max_val = np.zeros(dim)    for i in range(dim):      min_val[i] = np.nanmin(norm_data[:,i])      norm_data[:,i] = norm_data[:,i] - np.nanmin(norm_data[:,i])      max_val[i] = np.nanmax(norm_data[:,i])      norm_data[:,i] = norm_data[:,i] / (np.nanmax(norm_data[:,i]) + 1e-6)       norm_parameters = {'min_val': min_val,                       'max_val': max_val}  else:    min_val = parameters['min_val']    max_val = parameters['max_val']    for i in range(dim):      norm_data[:,i] = norm_data[:,i] - min_val[i]      norm_data[:,i] = norm_data[:,i] / (max_val[i] + 1e-6)      norm_parameters = parameters      return norm_data, norm_parameters


2.3 模型搭建


按照Gain算法基本架構(gòu),分別構(gòu)建生成器generator和判別器discriminator,然后按照偽代碼過程搭建架構(gòu)。

其中偽代碼如下:

圖片































def generator(x,m):  inputs = tf.concat(values = [x, m], axis = 1)   G_h1 = tf.nn.relu(tf.matmul(inputs, G_W1) + G_b1)  G_h2 = tf.nn.relu(tf.matmul(G_h1, G_W2) + G_b2)     G_prob = tf.nn.sigmoid(tf.matmul(G_h2, G_W3) + G_b3)   return G_probdef discriminator(x, h):  inputs = tf.concat(values = [x, h], axis = 1)   D_h1 = tf.nn.relu(tf.matmul(inputs, D_W1) + D_b1)    D_h2 = tf.nn.relu(tf.matmul(D_h1, D_W2) + D_b2)  D_logit = tf.matmul(D_h2, D_W3) + D_b3  D_prob = tf.nn.sigmoid(D_logit)  return D_probX = tf.placeholder(tf.float32, shape = [None, dim])M = tf.placeholder(tf.float32, shape = [None, dim])H = tf.placeholder(tf.float32, shape = [None, dim])D_W1 = tf.Variable(xavier_init([dim*2, h_dim])) D_b1 = tf.Variable(tf.zeros(shape = [h_dim]))D_W2 = tf.Variable(xavier_init([h_dim, h_dim]))D_b2 = tf.Variable(tf.zeros(shape = [h_dim]))D_W3 = tf.Variable(xavier_init([h_dim, dim]))D_b3 = tf.Variable(tf.zeros(shape = [dim]))  theta_D = [D_W1, D_W2, D_W3, D_b1, D_b2, D_b3]G_W1 = tf.Variable(xavier_init([dim*2, h_dim]))  G_b1 = tf.Variable(tf.zeros(shape = [h_dim]))G_W2 = tf.Variable(xavier_init([h_dim, h_dim]))G_b2 = tf.Variable(tf.zeros(shape = [h_dim]))G_W3 = tf.Variable(xavier_init([h_dim, dim]))G_b3 = tf.Variable(tf.zeros(shape = [dim]))theta_G = [G_W1, G_W2, G_W3, G_b1, G_b2, G_b3]

完整代碼:

鏈接:https://pan.baidu.com/s/1EdlmEx7lXsGKMm8DQR4lZA

提取碼:yeyz

李秋鍵,CSDN博客專家,CSDN達(dá)人課作者。碩士在讀于中國礦業(yè)大學(xué),開發(fā)有taptap競(jìng)賽獲獎(jiǎng)等。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉