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

2021-01-19 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

此推論適用於MCAR,MAR和MNAR的所有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數據清洗(二):缺失值識別與處理
    缺失值指的是由於人為或機器等原因導致數據記錄的丟失或隱瞞,缺失值的存在一定程度上會影響後續數據分析和挖掘的結果,所以對他的處理將顯得尤為重要。缺失值的識別判斷一個數據集是否存在缺失觀測,通常從兩個方面入手,一個是變量的角度,即判斷每個變量中是否包含缺失值;另一個是數據行的角度,即判斷每行數據中是否包含缺失值。
  • 大數據的預處理、離散化要點羅列
    大數據預處理技術1.目前存在四種主流的數據預處理技術:數據清理、數據集成、數據規約和數據變換。2.數據處理的主要任務(1)數據處理的主要步驟:數據清理、數據集成、數據規約和數據變換。(2)數據清理例程通過填寫缺失值、光滑噪聲數據、識別或者刪除離群點並且解決不一致性來「清理數據」。
  • 數據挖掘非常重要的一步:數據預處理
    為什麼數據處理很重要對數據挖掘熟悉的小夥伴,數據處理相關佔據了整個項目的工作時間60%以上的。數據的質量,直接決定了模型的預測和泛化能力的好壞。它涉及很多因素,包括:準確性、完整性、一致性、可信性和解釋性。
  • 第五十三講 R-缺失值的注意事項及處理
    在數據分析過程中,我們經常會遇到缺失值的情況。比如要研究血壓、血糖、胰島素水平、懷孕次數與糖尿病的關係。我們需要使用多元邏輯回歸。但是可能數據有10%的血壓確實,10%的胰島素水平缺失,10%的血糖缺失。
  • 在python中使用KNN算法處理缺失的數據
    處理缺失的數據並不是一件容易的事。 方法的範圍從簡單的均值插補和觀察值的完全刪除到像MICE這樣的更高級的技術。 解決問題的挑戰性是選擇使用哪種方法。 今天,我們將探索一種簡單但高效的填補缺失數據的方法-KNN算法。KNN代表「 K最近鄰居」,這是一種簡單算法,可根據定義的最接近鄰居數進行預測。 它計算從您要分類的實例到訓練集中其他所有實例的距離。
  • 多重插補法處理缺失數據(缺失值)
    同時,我們還將以最新發表、或各學科Top期刊文章中的統計方法為例,給大家逐一講解如何做統計(分析數據)!介 紹做科學研究的時候,我們經常會碰到缺失值的問題,除了直接刪除、簡單插補,多重插補也是常用到的處理缺失數據的方法。使用軟體使用軟體:SPSS 25.0,建議使用高版本。
  • 數值數據的特徵預處理
    特徵預處理是數據挖掘中最重要的步驟。在這篇文章中,我將向你介紹特徵預處理的概念,它的重要性,不同的機器學習模型下的數值特徵的不同特徵預處理技術。模型的質量在很大程度上取決於輸入模型的數據。當從數據挖掘過程中收集數據時,會丟失一些數據(我們將其稱為丟失值)。此外,它很容易受到噪音的影響。
  • 使用Python預測缺失值
    對於數據科學家來說,處理丟失的數據是數據清理和模型開發過程中的一個重要部分。通常情況下,真實數據包含多個稀疏欄位或包含錯誤值的欄位。在這篇文章中,我們將討論如何建立可以用來填補數據中缺失或錯誤值的模型。
  • SPSS 經典教材:基於回歸法填充缺失值
    如何能夠合理得當地處理缺失值是至關重要的。缺失值的處理方法很多,包括直接去除,對於大樣本研究來說,直接去除可能對結果造成的影響尚可接受,但是對於樣本量不多的研究來講,可能就是很大的影響。對於缺失值插補的方法也很多,最常見的包括臨近值,均值,中位數,眾數,回歸,多重插補等。前三類的填補,因為缺少隨機誤差,填補顯得比較蒼白,後兩者,尤其是多重插補,因為考慮到存在隨機誤差,在填補效率方面顯得更加優秀。
  • 如何通過網絡數據的獲取,做出這些數據分析項目?
    作者 | AlfredWu 來源 | Alfred數據室 最近有很多人在問,我是如何收集網絡的數據,如何進行數據處理、數據分析以及可視化呈現的。也有人問的更具體,關於Python數據分析的一些問題。到底應該怎麼學?如何快速入門,以及技術和業務之間的瓶頸如何突破?
  • XGBoost缺失值引發的問題及其深度分析|CSDN博文精選
    執行結果不一致問題排查歷程如何排查?首先想到排查方向就是,兩種處理方式中輸入的欄位類型會不會不一致。如果兩種輸入中欄位類型不一致,或者小數精度不同,那結果出現不同就是可解釋的了。仔細分析模型的輸入,注意到數組中有一個6.666666666666667,是不是它的原因?一個個Debug仔細比對兩側的輸入數據及其欄位類型,完全一致。
  • AI時代,數據挖掘過時了嗎?—企業數據挖掘成功之道(理論篇)
    數據挖掘涉及知識面廣,技術點多。在面對複雜多樣的業務分析場景時,如何做出有效的數據挖掘分析方案其實是有一套可遵循的方法體系。針對不同的分析數據和業務場景,數據挖掘的方法可以分為監督學習、無監督學習、半監督學習、增強學習,每種方法都有其適應的分析場景和數據基礎。
  • 如何用SPSS進行數據分析?
    1.1 SPSS的核心功能1.2 數據編輯功能可以通過SPSS的數據編輯功能,對數據進行增刪改等處理,還可以根據需要對數據進行拆分、加權、排序、聚合等處理。2.如何用SPSS進行數據分析首先,要了解數據分析的一般流程是什麼?
  • Python數據分析|線性回歸
    ①導入Python常用數據分析庫:常用的numpy、pandas、matplotlib先導入。②將待處理的數據讀取:read_excel進行Excel文件讀取,用sheet_name指定導入的sheet。③數據初視:用head函數將讀取的數據表格展示前幾行用於初步觀察,可以看到初步的數據形式、欄位。
  • 題庫 | 神經網絡數據預處理方法有哪些?
    如果權值的初始值過大,則會導致梯度爆炸,使得網絡不收斂;過小的權值初始值,則會導致梯度消失,會導致網絡收斂緩慢或者收斂到局部極小值。如果權值的初始值過大,則 loss function 相對於權值參數的梯度值很大,每次利用梯度下降更新參數的時,參數更新的幅度也會很大,這就導致 loss function 的值在其最小值附近震蕩。
  • 網絡流量數據缺失?新算法可減少誤差,提升數據恢復的精確度
    為解決網絡流量數據的缺失問題,本文提出了一種基於交替最小二乘法的時空張量填充算法以恢復流量數據張量中的缺失值。本文提出的算法不僅利用了張量分解及其低維表示,還充分考慮了網絡流量數據的時空相關性,進一步提高了數據恢復的準確性。本文使用Abilene數據集對算法進行測試,並與現有的填充方法進行對比。實驗結果表明,本文提出的方法能夠有效地減少流量數據恢復的誤差,提升了數據恢復的精確度。
  • 監控視頻中的圖像預處理技術
    如何在現有的條件下提高採集視頻質量的問題就實在地放在我們面前。對此,一個重要的應對措施就是在視頻採集環節進行預處理(preprocessing),以利於提高採集視頻質量,有利於後續的視頻處理,以利於用戶提取視頻中感興趣的信息。  視頻預處理的第二個作用是提高編碼效率和有利於碼率控制。
  • 科普| 測繪地理信息基礎數據是什麼?如何下載?
    它是將國家基本比例尺地形圖上各類要素 包括水系、境界、交通、居民地、地形、植被等按照一定的規則分層、按照標準分類編碼,對各要素的空間位置、屬性信息及相互間空間關係等數據進行採集、編 輯、處理建成的資料庫。根據國家基礎地理信息系統總體設計,國家級地形資料庫的比例尺分為1:100萬、1:25萬和1:5萬三級。省級地形資料庫的比例 尺分為1:25萬、1:5萬和1:1萬三級。
  • 乾貨 面向大數據的時空數據挖掘
    時空數據預處理  時空數據結構複雜且來源多樣,在充分理解了時間數據,空間數據和事件數據的特徵、屬性及他們之間的關聯關係的基礎上,整合、清洗和轉換不同來源的時空數據,使得他們符合特定時空數據挖掘算法的要求,是時空數據預處理面臨的重要問題。本節我們將結合 IBM SPSS Modeler 詳細介紹時空數據預處理的方法和步驟。
  • Nucleic Acids Res | 代謝組學數據預處理
    其中,對上述代謝組數據的預處理一直存在方法繁多、性能不一、缺乏評估等嚴重影響處理效能的關鍵問題(J Proteome Res. 13: 3114-20, 2014)。針對上述問題,浙江大學藥學院朱峰教授課題組,在其開發的數據歸一化工具NOREVA的基礎上,構建了用於時間序列和多類別代謝組學數據預處理的新型服務系統(https://idrblab.org/noreva/)。