kNN のコツとヒント II:変数の並べ替え
k-最近傍法アルゴリズムは、データの変数を順番にループしながら補完を行います。このとき、他の変数との距離を計算しますが、その中にはすでに前のステップで補完された変数も含まれます。つまり、データの先頭に位置する変数に欠損値が多いほど、その後の距離計算が補完済みの値に大きく依存することになります。これにより、距離計算にノイズが入り込んでしまいます。
そのため、kNN 補完を行う前に、欠損値の数が少ない順に変数を並べ替えておくことが推奨されます。こうすることで、各距離計算をできるだけ実測値に基づいて行い、補完値への依存を最小限に抑えることができます。
tao データでこの手法を試してみましょう。
この演習はコースの一部です
R による欠損データの補完処理
演習の手順
- パイプラインの最初のステップで、
taoの各列の欠損値の数を計算してください。 - 次に、欠損値の数が少ない順に変数を並べ替え、その列名を取り出して
vars_by_NAsに代入してください。 select()を使って、vars_by_NAsに保存された順番でtaoの変数を並べ替えてください。- 並べ替えたデータに k-最近傍法による補完を実行し、結果を
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")