Scikitlearn中OneHotEncoder和KNIMPUTE之间的循环循环

2024-10-04 05:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个非常简单的数据集。它在分类和数字特征中都缺少一些值。正因为如此,我尝试使用sklearn.preprocessing.knimpute来获得最准确的插补。但是,当我运行以下代码时:

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: Input contains NaN

我更喜欢使用KNNImpute即使是分类数据,因为我觉得如果我只使用ColumnTransform并分别用数字和分类数据进行插补,我会失去一些准确性。有没有办法让OneHotEncoder忽略这些缺失的值?如果不是,使用ColumnTransform或更简单的插补器是解决此问题的更好方法吗

提前谢谢


Tags: 数据encoder错误分类transformtrain数字特征
1条回答
网友
1楼 · 发布于 2024-10-04 05:20:00

在处理OneHotEncoder上缺少的值时,还存在一些未解决的问题/pr,但目前还不清楚这些选项是什么。在此期间,这里有一个手动方法

  • 用pandas或SimpleImputer字符串“missing”填充分类缺失
  • 然后使用OneHotEncoder
  • 使用one hot编码器的get_feature_names来识别对应于每个原始特征的列,尤其是“缺失”指示符
  • 对于每一行和每个原始分类特征,当1位于“缺失”列中时,将0替换为np.nan;然后删除缺少的指示符列
  • 现在一切都应该设置为运行KNNImputer
  • 最后,如果需要,对输入的分类编码列进行后处理。(简单地四舍五入可能会为分类功能获得一个全零行,但我不认为使用KNNImputer可以在一行中获得多个1。您可以使用argmax取而代之,只返回一个1。)

相关问题 更多 >