カテゴリ値のKNN補完
DataFrame 内のすべてのカテゴリ列を序数に変換し終えたら、補完の準備が整います。K-Nearest Neighbors (KNN) のような統計モデルを使って補完すると、より良い結果が得られます。
この演習では、
fancyimputeのKNN()関数を使って、序数エンコード済みの DataFrameusersの欠損値を補完します。- 序数値を、序数エンコーダの
.inverse_transform()メソッドで元のカテゴリに戻します。
ordinal_enc_dict には各列に対応する sklearn の OrdinalEncoder() が格納されています。
users DataFrame には各列のエンコード後の値(序数値)が入っています。
KNN() 関数、OrdinalEncoder() のディクショナリ ordinal_enc_dict、そして users DataFrame はすでに読み込まれています。
この演習はコースの一部です
Pythonで欠損データに対処する
演習の手順
KNN_imputerのfit_transform()メソッドでusersDataFrame を補完します。変換後の値は丸めて整数にします。usersの各列を反復処理します。ordinal_enc_dictからその列のOrdinalEncoder()を選び、整形した配列reshapedに対して.inverse_transform()を実行します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create KNN imputer
KNN_imputer = KNN()
# Impute 'users' DataFrame. It is rounded to get integer values
users_KNN_imputed.iloc[:, :] = np.round(___)
# Loop over the column names in 'users'
for col_name in ___:
# Reshape the column data
reshaped = users_KNN_imputed[col_name].values.reshape(-1, 1)
# Select the column's Encoder and perform inverse transform on 'reshaped'
users_KNN_imputed[col_name] = ___