我正在处理一个非常简单的数据集。它包含一些分类和数值特征的缺失值。因此,我尝试使用sklearn.preprocessing.KNNImpute来获取最准确的插补结果。然而,当我运行以下代码时:
imputer = KNNImputer(n_neighbors=120)
imputer.fit_transform(x_train)
我遇到了错误:ValueError: could not convert string to float: 'Private'
这很合理,它显然无法处理分类数据。但是当我尝试使用以下代码运行 OneHotEncoder 时:
encoder = OneHotEncoder(drop="first")
encoder.fit_transform(x_train[categorical_features])
它会抛出错误:
ValueError: 输入包含NaN
我更喜欢使用KNNImpute
,即使对于分类数据,因为我感觉如果只使用ColumnTransform
并分别用数字和分类数据填充,我可能会失去一些准确性。有没有办法让OneHotEncoder
忽略这些缺失值?如果没有,那么使用ColumnTransform
或更简单的imputer来解决这个问题哪种方法更好?提前致谢
KNNImpute
填充独热编码分类变量通常会产生0到1之间的值(除非n_neighbors=1
); 对于您的用途来说这样可以吗?如果可以,您希望如何编码缺失值:作为新列还是全部为零? - Ben ReinigerOneHotEncoder()
中的这些NAs,以便我也可以在分类变量中KNNImpute这些NAs。难道没有真正的办法做到这一点吗? - DuplicitousManowar