对分类值进行 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] = ___