數據的預處理基礎:如何處理缺失值

2020-12-17 deephub

圖片來源: thermofisher

數據集缺少值? 讓我們學習如何處理:

數據清理/探索性數據分析階段的主要問題之一是處理缺失值。 缺失值表示未在觀察值中作為變量存儲的數據值。 這個問題在幾乎所有研究中都是常見的,並且可能對可從數據得出的結論產生重大影響。

查看數據中的缺失值,您的第一項工作是基於3種缺失值機制來識別缺失模式:

MCAR(完全隨機丟失):如果數據的缺失與任何值(觀察或缺失)之間沒有關係,則為MCAR。MAR(半隨機丟失):您必須考慮MAR與MCAR有何不同, 如果缺失和觀測值之間存在系統關係,則為MAR。 例如-男性比女性更容易告訴您自己的體重,因此體重就是MAR。 「 Weight」變量的缺失取決於變量「 Sex」的觀測值。MNAR(不隨機丟失):如果2個或更多變量的缺失具有相同模式,則為MNAR。您可以可視化數據來驗證完整性(使用Python代碼):

您可以可視化數據集中缺失的位置(使用Python代碼):

在可視化中,您可以檢查缺失是MCAR,MAR還是MNAR。

如果兩個或多個變量中的缺失具有相同的模式,則為MNAR。 您可以使用一個變量對數據進行排序(並可視化),並可以確定它是否完全是MNAR。例如 「住房」和「貸款」變量的缺失模式相同。如果任何兩個或多個變量的缺失之間沒有關係,並且一個變量的缺失值和另一個變量的觀測值之間也沒有關係,則這就是MCAR如果缺失和觀測值之間存在系統關係,則為MAR。 我們將在下面學習如何識別缺失值是MAR。您可以按照以下兩種方法檢查缺失值:

缺失熱圖/相關圖:此方法創建列/變量之間的缺失值的相關圖。 它解釋了列之間缺失的依賴性。

它顯示了變量「房屋」和「貸款」的缺失之間的相關性。

缺失樹狀圖:缺失樹狀圖是缺失值的樹形圖。 它通過對變量進行分組來描述它們之間的相關性。

它表明變量「住房」和「貸款」高度相關,這就是MNAR。從「 age_group」到「 contact」的變量在「 0」級別彼此關聯,並充分預測彼此的存在。 或者,您可以說此部分沒有缺失的值。其餘變量的缺失是MAR或MCAR。 要檢查這一點,我們可以使用2種方法:方法1:

可視化變量的缺失如何相對於另一個變量變化。通過使用兩個變量的散點圖,我們可以檢查兩個變量之間的關係是否缺失。

x軸變量的缺失值分布在y軸的整個其他變量中。 因此,我們可以說沒有關係。 缺失值是MCAR。 如果您沒有在散點圖中找到任何關係,則可以說變量中的缺失是「隨機缺失」。方法2:

然後,您可以在此變量與數據集中的其他變量之間運行t檢驗卡方檢驗,以查看此變量的缺失是否與其他變量的值有關。例如,如果女性相比男性確實不太可能告訴您自己的體重,則卡方檢驗會告訴您,女性在體重變量上缺失數據的百分比比男性高。現在,我們已經確定了缺失值的性質。 讓我們學習如何處理缺失的值:

Listwise刪除:如果缺少的值非常少,則可以使用Listwise刪除方法。 如果缺少分析中所包含的變量的值,按列表刪除方法將完全刪除個案。

成對刪除:成對刪除不會完全忽略分析中的案例。 當統計過程使用包含某些缺失數據的案例時,將發生成對刪除。 該過程不能包含特定變量,但是當分析具有非缺失值的其他變量時,該過程仍然實用。 例如,假設有3個變量:A,B和C。變量A包含缺失值。 但這不會阻止某些統計過程使用相同的情況來分析變量B和C。成對刪除允許您使用更多數據。 它試圖使Listwise刪除中發生的損失最小化。

兩種技術均假定缺失模式為MCAR(隨機完全缺失)。 當缺失值小於5%且缺失完全是隨機的並且不取決於觀察值或未觀察值時,可以使用上述技術。

缺失價值估算-基本估算技術:

均值| 中位數| 模式| 常數(例如:「 0」)

均值插補:均值插補是一種方法,將某個變量的缺失值替換為可用觀察值的均值。 這種方法有助於保持樣本數量,但由於所有缺失值都具有相同的「均值」,因此數據的可變性有所降低。

您可以採用相同的方式應用中位數:「 strategy =」 median」您可以採用相同方式應用模式:「 strategy =」 most_frequent」同樣,您可以估算一個常數:('strategy ='constant',fill_value = 0)在估算之前,我們已經複製了「 df」數據集,目的只是為了與原始數據集進行比較。歸因散點圖:

您會發現,根據散點圖,兩個變量之間存在很強的相關性,但是「紅色」顏色的估算值是一條直線,沒有考慮相關性。因此,我們可以說這種假設在這裡是不好的。同樣,您可以檢查其他插補值,例如中值,眾數和常量值。回歸:

可能有一些變量存在缺失值。 但是,還有一些是一些沒有缺失值的變量。 使用沒有缺失值的變量,我們可以藉助機器學習算法來預測缺失值。 為此,我們可以使用線性回歸算法。

估計回歸模型以基於其他變量預測變量的觀測值,然後在該變量的值缺失的情況下使用該模型來估算值。 換句話說,完整和不完整案例的可用信息用於預測特定變量的值。 然後,將回歸模型中的擬合值用於估算缺失值。

但是事情並不是那麼容易。 問題在於估算的數據中沒有包含誤差項,因此這些估計值沿回歸線完全擬合,沒有任何殘差。 這導致過擬合。 回歸模型可預測丟失數據的最可能值,但可能產生過擬合。

隨機回歸插補

隨機回歸插補使用回歸方程從完整變量中預測不完整變量,但是它需要採取額外的步驟,即使用正態分布的殘差項來增加每個預測得分。

將殘差添加到估算值可恢復數據的可變性,並有效消除與標準回歸估算方案相關的偏差。實際上,隨機回歸插補是唯一在MAR缺失數據機制下給出無偏參數估計的過程。因此,這是唯一具有某些優點的傳統方法。最近鄰插補

KNNImputer提供了使用k最近鄰方法來填充缺失值的方法。 KNN是一種用於在多維空間中將點與其最接近的鄰居進行匹配的算法。 要查找最近的鄰居,可以使用歐幾裡德距離方法(默認)。 使用在訓練集中找到的n個最近鄰居的平均值估算缺失值。 您可以在運行imputer時提供n_neighbors的值。 K近鄰可以預測定性和定量屬性

例如:您具有以下帶有3個變量的數據。 變量「 Var3」缺少值。 您想使用KNN Imputer來估算缺失的值。

在Python中使用以下代碼,您可以將缺失值估算為「 5.5」。

手動計算:

您需要使用歐幾裡德距離公式計算點(6,4)與其他可用點(5,6),(9,9),(8,6)和(6,5)的距離:

dist((x, y), (a, b)) = √(x — a) + (y — b)

您會發現2個最近的鄰居是(5,6)&(6,5),「 Var3」中的各個值分別是3和8。因此,這2個點的平均值為(3 + 8)/ 2 = 5.5

此推論適用於MCARMARMNAR的所有3種缺失值機制。KNN插補可用於處理任何類型的數據,例如連續數據離散數據有序數據分類數據鏈式方程的多重插補(MICE):

多重插補涉及為每個缺失值創建多個預測。 多個估算數據的方式考慮了估算的不確定性(估計值之間的差異),並產生了更準確的標準差。

單一插補方法則不是這種情況,因為插補方法往往會導致較小的標準測量誤差,進而會導致1類誤差。

基本思想是將具有缺失值的每個變量視為回歸中的因變量,而將其餘部分作為其預測變量。

MICE的假設是,給定插補過程中使用的變量,缺失值是隨機缺失(MAR),這意味著缺失值的概率僅取決於觀察值,而不取決於未觀察值。

在MICE程序中,將運行一系列回歸模型,從而根據數據中的其他變量對具有缺失數據的每個變量進行建模。 這意味著每個變量都可以根據其分布進行建模,例如,使用邏輯回歸建模的二進位變量和使用線性回歸建模的連續變量。

MICE步驟

步驟1:對數據集中的每個缺失值執行簡單的估算。 例如-均值插補。

步驟2:將一個變量('Var1')的平均估算值重新設置為丟失。

步驟3:將步驟2中變量「 Var1」的觀測值回歸到插補模型中的其他變量上。 換句話說,「 Var1」是回歸模型中的因變量,所有其他變量都是回歸模型中的自變量。

步驟4:然後將'Var1'的缺失值替換為回歸模型中的預測。 隨後在其他變量的回歸模型中將「 Var1」用作自變量時,將同時使用觀察值和這些推測值。

步驟5:然後對每個缺少數據的變量重複步驟2-4。 每個變量的循環構成一個迭代或「循環」。 在一個周期結束時,所有缺失值都已被回歸預測所替代,這些預測反映了數據中觀察到的關係。

步驟6:將步驟2-4重複多個循環,並在每個循環中更新估算值。

在Python中使用以下代碼,您可以使用MICE估算缺失值:

最大似然估計-期望最大化(EM)算法

最大似然估計是一種用於數據集密度估計的方法。 密度估計是通過估計概率分布及其參數來完成的。

但是,當存在一些潛在變量時,最大似然法不能很好地工作。 因為最大似然法假設訓練數據集是完整的並且沒有缺失值。 EM算法方法可用於滿足我們發現潛在變量的情況。

「在潛在變量模型中找到最大似然估計器的通用技術是期望最大化(EM)算法。」

EM算法基本上分為兩個階段。 第一階段有助於估計缺失值。 此步驟稱為E步驟。 第二階段有助於優化模型的參數。 此步驟稱為M步。 重複這兩個步驟,直到我們收斂。 收斂意味著,我們獲得了一組很好的潛在變量值,並且獲得了適合數據的最大似然。

為此,我們可以使用「高斯混合模型」。 高斯混合模型是使用高斯概率分布的組合的混合模型,需要估計概率分布參數,即均值和標準差。

其他插補方法:

最後的觀察結轉方法

最後觀察結轉方法會在最後一次觀察個體時估算缺失值。 該方法假設自從上次測量的觀察以來,個人的觀察完全沒有變化,這幾乎是不現實的。

然後,就好像沒有丟失的數據一樣,分析觀察到的數據和估算數據的組合。

Hot-Deck插補

Hot-Deck插補是一種處理缺失數據的方法,其中,將每個缺失值替換為「相似」單元觀察到的響應。 它涉及用來自受訪者(捐贈者)的觀察值替換無受訪者(稱為接受者)的一個或多個變量的缺失值,就兩種情況觀察到的特徵而言,該值類似於無受訪者。

單獨類別

如果缺少分類變量的值,則可以將缺失的值視為一個單獨的類別。 我們可以為缺失值創建另一個類別,並在不同級別上使用它們。

例如:您有一個變量「性別」,其中2個類別是「男性」和「女性」。 但是此變量缺少大約10%的數據。 您不能直接為這些缺失值估算值。 因此,更好的方法是為缺失的值創建一個單獨的類別「 Missing」,並繼續進行分析和模型開發。

作者:Yogesh Khurana -

deephub翻譯組:孟翔傑

相關焦點

  • 為什麼我們需要數據預處理?
    數據預處理就是解決上面所提到的數據問題的可靠方法。那它是怎麼做到的呢?就像大廚準備處理魚的刀具一樣,數據預處理也是如此。它準備原始數據以便進一步處理。應用是時候採取一些簡單的實際應用來了解數據預處理是如何完成的。下面的例子我們用 Python 來處理,還需要用到兩個庫,分別是 Numpy、Pandas。
  • python數據科學-數據預處理
    數據預處理是我們在做機器學習之前必經的一個過程,在機器學習中常見的數據預處理包括缺失值處理,縮放數據以及對數據進行標準化處理這三個過程
  • Python數據預處理
    由於人員錄入數據過程中或者存儲器損壞等原因,缺失值在一份數據中或多或少存在,所以首先就需要對缺失值進行處理,缺失值處理總的原則是:使用最可能的值代替缺失值,使缺失值與其他數值之間的關係保持最大。具體的常用方法如下:刪除缺失值(缺失值佔比很小的情況)人工填充 (數據集小,缺失值少)用全局變量填充(將缺失值填充一常數如「null」)使用樣本數據的均值或中位數填充用插值法(如拉格朗日法、牛頓法)Python缺失值處理實例代碼:判斷刪除缺失值- -isnull
  • 離群值與缺失值的識別與處理
    >在數據處理中,出現離群值和缺失值的情況非常常見。原來咱們在說數據處理的時候也曾經提到過這個情況,這裡,一起再聊聊離群值和缺失值的識別與處理。 離群值的識別與處理離群值(outlier):距離整體數據較遠的數據稱為離群值。沒有搞明白離群值產生的原因之前,不要簡單捨棄,尤其是數據較少的時候。
  • 數據分析|R-缺失值處理
    數據中往往會有各種缺失值,異常值,錯誤值等,今天先介紹一下如何處理缺失值,才能更好的數據分析,更準確高效的建模。一 查看數據集的缺失情況    R中使用NA代表缺失值,用is.na識別缺失值,返回值為TRUE或FALSE。由於邏輯值TRUE和FALSE分別等價於數值1和0,可用sum()和mean()來獲取數據集的缺失情況。
  • R語言如何檢測和處理數據缺失值?
    面對一份數據,我們會做數據的缺失值檢測和分析,根據數據的缺失程度,以知道數據的完整性和可用性。實際的數據,絕大部分會有缺失值現象。缺失值的產生與諸多因素有關聯,例如:數據採集不成功,數據採集成功了但是數據確實沒有值,數據的值受其它因素控制等。面對有缺失值的數據,我們要怎麼處理、分析和應用,是我們數據工作者要思考和實踐的命題。
  • 數據預處理之「數據清理」
    鑑於高質量數據可生成更好的模型和預測,數據預處理的重要性與日俱增,並且已經成為數據科學、機器學習、AI 管道中的基本步驟。在本文中,我們將探討數據處理需求,並討論用於完成此流程中每個步驟的不同方法。在數據收集過程中,存在三個影響數據質量的主要因素:準確率:與期望值之間存在偏差的錯誤值。
  • Python數據清洗(二):缺失值識別與處理
    缺失值指的是由於人為或機器等原因導致數據記錄的丟失或隱瞞,缺失值的存在一定程度上會影響後續數據分析和挖掘的結果,所以對他的處理將顯得尤為重要。缺失值的識別判斷一個數據集是否存在缺失觀測,通常從兩個方面入手,一個是變量的角度,即判斷每個變量中是否包含缺失值;另一個是數據行的角度,即判斷每行數據中是否包含缺失值。
  • 機器學習基礎:缺失值的處理技巧
    在數據分析和建模中,經常會遇到變量值缺失的情況,這是非常常見的。為了保證數據指標的完整性以及可利用性,通常我們會採取特殊的方式對其進行處理。 1、缺失查看 首先,需要查看缺失值的缺失數量以及比例(#數據使用的kaggle平臺上預測房價的數據) 柱形圖可視化
  • Kaggle知識點:缺失值處理
    寫在前面在進行數據競賽中,數據預處理階段經常需要對數據進行缺失值處理。關於缺失值的處理並沒有想像中的那麼簡單。以下為一些經驗分享,基本涵蓋了大部分處理方式。這樣做的好處是,D的係數可以被解釋成「在控制了其他變量的情況下,X具缺失數據的個體其Y的預測值減去具X平均數的個體於Y的預測值」缺失值插補相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。
  • 一份SPSS回歸分析與數據預處理的心得體會
    一定要對數據做缺失值處理、異常值處理。在數據預處理的基礎上再進一步建模,否則可能得到錯誤的結果。心得1:數據預處理怎麼做。一是 缺失值的處理。我個人有幾個看法:數據樣本量足夠大,在刪除缺失值樣本的情況下不影響估計總體情況,可考慮刪除缺失值;二是數據樣本量本身不大的情況下,可從以下兩點考慮:1是採用缺失值替換,SPSS中具體操作為「轉換」菜單下的「替換缺失值」功能,裡面有5種替換的方法。
  • 大數據的預處理、離散化要點羅列
    大數據預處理技術1.目前存在四種主流的數據預處理技術:數據清理、數據集成、數據規約和數據變換。2.數據處理的主要任務(1)數據處理的主要步驟:數據清理、數據集成、數據規約和數據變換。(2)數據清理例程通過填寫缺失值、光滑噪聲數據、識別或者刪除離群點並且解決不一致性來「清理數據」。(3)數據集成過程將來自多個數據源的數據集成到一起。(4)數據規約的目的是得到數據集的簡化表示。數據規約包括維規約和數值規約。
  • 使用scikit-learn對數據進行預處理
    數據的質量決定了模型的上限,在真實的數據分析中,輸入的數據會存在缺失值,不同特徵的取值範圍差異過大等問題,所以首先需要對數據進行預處理。
  • 機器學習基礎:缺失值的處理技巧(附Python代碼)
    在數據分析和建模中,經常會遇到變量值缺失的情況,這是非常常見的。為了保證數據指標的完整性以及可利用性,通常我們會採取特殊的方式對其進行處理。
  • 數據挖掘非常重要的一步:數據預處理
    在真實數據中,我們拿到的數據可能包含了大量的缺失值,可能包含大量的噪音,也可能因為人工錄入錯誤導致有異常點存在,非常不利於算法模型的訓練。需要清洗數據,提供給數據統計、數據挖掘等使用。小編最近忙於數據挖掘項目,抽了一些時間進行了總結,希望對讀者能有所借鑑,也歡迎關注公眾號,儘量定期更新所思所想!
  • Python數據分析之scikit-learn與數據預處理​
    當然,數據預處理絕對也是耗時最長的一個過程,這一過程不僅要求洞悉整個數據集結構分布,還要探查每一個特徵屬性細節情況,並作出應對處理,使數據以最適合的狀態傳輸給模型。針對預處理操作,sklearn中提供了許多模塊工具,靈活使用工具可以讓數據預處理輕鬆很多。本文簡要介紹數據預處理中的一些主要方法,並結合sklearn中提供的模塊進行實踐。
  • R 機器學習 | 數據預處理
    本文為 機器學習實戰 | 數據預處理(基於 Python) 的姊妹篇 R 語言實現。1.
  • 機器學習之缺失值處理
    我們先看一部分缺失值數據,以對我們要處理的內容有初步了解缺失值數據圖片比較小,其實這段時間的數據缺失值還是較多的(我是特意找了段缺失值多的數據,方便我們後面對比不同處理方法的結果,嘿嘿~~~),這裡面我們以temp_out欄位為例來進行下面的缺失值處理啦
  • 如何使用python技術完成數據集缺失值多種應用場景的濾除或填充?
    比如,我們會用數據分析統計數據集中的缺失值、異常值,更直觀的也會進階到數據可視化的部分(到達該部分一般是成了文章類或匯報類的一部分),然後以統計結果為基礎再對數據進行處理。這個過程往往不是一次性過程,是循環往復的。然後數據處理的結果是有質量的,對後期的數據挖掘、機器學習、深度學習以及其他更多的應用,提供了堅實的基礎。接下來,我們就一起來梳理和總結一下,數據處理過程中,經常遇到的缺失值處理方法。
  • 教你使用caret包(一)--數據預處理
    首先來看看caret是如何實現數據的預處理,關於這部分,主我將從如下主要的6個方面介紹:一、創建啞變量如果你有一個因子型變量需要進行啞變量處理,你會怎麼辦?也許你會根據該變量的m個水平數構建m-1個啞變量,不錯,這樣的思路是沒有問題的。但如果發現該變量確實很重要,而且水平數目非常多,那你一定會抓狂!