KNNImputer:一種可靠的缺失值插補方法


作者|KAUSHIK
編譯|VK
來源|Analytics Vidhya

概述

  • 學會用KNNImputer來填補數據中的缺失值

  • 了解缺失值及其類型

介紹

scikit learn公司的KNNImputer是一種廣泛使用的缺失值插補方法。它被廣泛認為是傳統插補技術的替代品。

在當今世界,數據是從許多來源收集的,用於分析、產生見解、驗證理論等等。從不同的資源收集的這些數據通常會丟失一些信息。這可能是由於數據收集或提取過程中的問題導致的,該問題可能是人為錯誤。

處理這些缺失值,成為數據預處理中的一個重要步驟。插補方法的選擇至關重要,因為它會對工作產生重大影響。

大多數統計和機器學習算法都是針對數據集的完整觀測。因此,處理丟失的信息變得至關重要。

統計學中的一些文獻涉及缺失值的來源和克服這個問題的方法。最好的方法是用估計值來估算這些缺失的觀測值。

在本文中,我們介紹了一個使用相鄰數據點的觀測值來填充數據集中缺失值的指南。為此,我們使用scikit-learn的KNNImputer實現。

目錄

  • 自由度問題

  • 缺失值模式

  • kNN算法的本質

  • 存在缺失值時的距離計算

  • KNNImputer插補方法

自由度問題

對於任何數據科學家來說,數據集中缺失的值都可能是一個馬蜂窩。缺失值的變量可能是一個非常重要的問題,因為沒有簡單的方法來處理它們。

一般來說,如果數據中缺失觀測值的比例相對於觀測值總數很小,我們可以簡單地刪除這些觀測值。

然而,這種情況並不常見。刪除包含缺失值的行可能會導致放棄有用的信息。

從統計學的角度來看,隨着獨立信息條數的減少,自由度降低。

缺失值模式

對於真實的數據集,缺失值是一個令人擔憂的原因。收集有關變量的觀察值時,可能會由於以下各種原因而丟失值

  • 機器/設備中的錯誤

  • 研究者的錯誤

  • 無法聯系的受訪者

  • 意外刪除

  • 部分受訪者健忘

  • 會計差錯等。

缺失值的類型通常可分為:

完全隨機缺失(MCAR)

當缺失的值對任何其他變量或觀察值的任何特征沒有隱藏的依賴性時,就會發生這種情況。如果醫生忘記記錄每10個進入ICU的病人的年齡,缺失值的存在並不取決於病人的特征。

隨機缺失(MAR)

在這種情況下,丟失值的概率取決於可觀測數據的特征。在調查數據中,高收入受訪者不太可能告知研究人員擁有的房產數量。所擁有房產的可變數量的缺失值將取決於收入變量。

非隨機缺失(MNAR)

當缺失的值既取決於數據的特征,也取決於缺失的值時,就會發生這種情況。在這種情況下,很難確定缺失值的生成機制。例如,血壓等變量的缺失值可能部分取決於血壓值,因為低血壓患者不太可能經常檢查血壓。

kNN算法的本質

用於缺失值插補的單變量方法是估計值的簡單方法,可能無法始終提供准確的信息。

例如,假設我們有與道路上汽車密度和空氣中污染物水平相關的變量,並且幾乎沒有關於污染物水平的觀察結果,用均值或者中位數污染物水平來估算污染物水平可能不一定是一個合適的策略。

在這種情況下,像k-最近鄰(kNN)這樣的算法可以幫助對缺失數據的值進行插補。

社會學家和社區研究人員認為,人類之所以生活在一個社區中,是因為鄰居們產生了一種安全感、對社區的依戀感以及通過參與各種活動而產生社區認同感的人際關系。

對數據起作用的一種類似的插補方法是k-最近鄰(kNN),它通過距離測量來識別相鄰點,並且可以使用相鄰觀測值的完整值來估計缺失值。

例子

假設你家里的必需食品已經沒有存貨了,由於封鎖,附近的商店都沒有營業。因此,你向你的鄰居尋求幫助,你最終會接受任何他們提供給你的東西。

這是一個來自3-NN的插補示例。

相反,如果你確定了3個向你尋求幫助的鄰居,並選擇將3個離你最近的鄰居提供的物品組合在一起,這就是3-NN的插補示例。

類似地,數據集中的缺失值可以借助數據集中k近鄰的觀察值來推算。數據集的鄰近點通過一定的距離度量來識別,通常是歐氏距離。

考慮一下上面表示kNN工作的圖。在本例中,橢圓形區域表示綠色方形數據點的相鄰點。我們用距離來確定鄰居。

kNN方法的思想是在數據集中識別空間相似或相近的k個樣本。然后我們使用這些“k”樣本來估計缺失數據點的值。每個樣本的缺失值使用數據集中找到的“k”鄰域的平均值進行插補。

存在缺失值時的距離計算

讓我們看一個例子來理解這一點。考慮二維空間(2,0)、(2,2)、(3,3)中的一對觀測值。這些點的圖形表示如下:

基於歐氏距離的最短距離點被認為是最近鄰點。例如,點A的1最近鄰點是點B。對於點B,1最近鄰點是點C。

在存在缺失坐標的情況下,通過忽略缺失值並放大非缺失坐標的權重來計算歐幾里德距離。

其中

例如,兩點(3,NA,5)和(1,0,0)之間的歐幾里德距離為:

現在我們使用sklearn包pairwise metric模塊中的nan_euclidean_distances 函數來計算缺失值兩點之間的距離。

盡管nan_euclidean_distances 適用於由X和Y參數提供的兩個一維數組,但它也可以適用於具有多個維度的單個數組。

因此,距離矩陣是一個2×2矩陣,它表示觀測對之間的歐幾里德距離。此外,合成矩陣的對角線元素為0,因為它表示單個觀測值與其自身之間的距離。

KNNImputer插補方法

我們將使用sklearn的impute 模塊中的KNNImputer 函數。KNNImputer通過歐幾里德距離矩陣尋找最近鄰,幫助估算觀測中出現的缺失值。

在這種情況下,上面的代碼顯示觀測1(3,NA,5)和觀測3(3,3,3)在距離上最接近(~2.45)。

因此,用一個1-最近鄰對觀測值1(3,NA,5)中的缺失值進行插補,得到的估計值為3,與觀測值3(3,3,3)的第二維度的估計值相同。

此外,用一個2-最近鄰來估算觀測值1(3,NA,5)中的缺失值將得到1.5的估計值,這與觀測值2和3的第二維度的平均值相同,即(1,0,0)和(3,3,3)。

到目前為止,我們討論了用KNNImputer處理連續變量的缺失值。下面,我們創建一個數據框,其中包含離散變量中缺少的值。

為了填補離散變量中的缺失值,我們必須將離散值編碼成數值,因為KNNImputer只對數值變量有效。我們可以使用類別到數值變量的映射來執行此操作。

結尾

在本文中,我們了解了缺失值、原因,以及如何使用KNNImputer 來填充缺失值。選擇k來使用kNN算法來填充缺失值可能是爭論的焦點。

此外,研究表明,在使用不同k值進行插補后,有必要使用交叉驗證來檢驗模型。盡管缺失值的插補是一個不斷發展的研究領域,但kNN是一種簡單而有效的策略。

原文鏈接:https://www.analyticsvidhya.com/blog/2020/07/knnimputer-a-robust-way-to-impute-missing-values-using-scikit-learn/

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM