kNN 小技巧 II:變數排序
當 k-Nearest Neighbors 演算法逐一巡訪資料中的變數進行插補時,會用其他變數來計算觀測值之間的距離,而其中有些變數在先前步驟中已經被插補。這代表如果資料中較前面的變數有很多遺漏值,後續的距離計算就會大量依賴插補後的數值。這會為距離計算帶來雜訊。
因此,在執行 kNN 插補前,先依遺漏值數量由小到大排序變數 是個好做法。如此一來,每次距離計算都能盡量基於已觀測到的資料,並盡量少用插補後的資料。
我們把這個做法用在 tao 資料上試試看吧!
本練習屬於課程
在 R 中以插補處理遺漏值
練習說明
- 在 pipeline 的第一部分計算
tao每一欄的遺漏值數量。 - 接著,依遺漏值數量「由小到大」排序變數,取出它們的名稱,並將結果指定給
vars_by_NAs。 - 使用
select()依vars_by_NAs中儲存的順序重新排列tao的變數。 - 對重新排序後的資料執行 k-Nearest Neighbors 插補,並將結果指定給
tao_imp。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Get tao variable names sorted by number of NAs
vars_by_NAs <- tao %>%
___ %>%
colSums() %>%
sort(decreasing = ___) %>%
names()
# Sort tao variables and feed it to kNN imputation
tao_imp <- tao %>%
select(___) %>%
___()
tao_imp %>%
select(sea_surface_temp, humidity, humidity_imp) %>%
marginplot(delimiter = "imp")