gpt4 book ai didi

python - Scikit-learn 中 OneHotEncoder 和 KNNImpute 之间的循环

转载 作者:行者123 更新时间:2023-12-04 09:30:39 26 4
gpt4 key购买 nike

我正在使用一个非常简单的数据集。它在分类和数字特征方面都有一些缺失值。因此,我尝试使用 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: Input contains NaN我更喜欢使用 KNNImpute即使使用分类数据,因为我觉得如果我只使用 ColumnTransform 我会失去一些准确性并分别用数字和分类数据进行估算。有什么办法可以拿到 OneHotEncoder忽略这些缺失值?如果没有,则使用 ColumnTransform或者更简单的输入器是解决这个问题的更好方法?
提前致谢

最佳答案

有 Unresolved 问题/PR 可以处理 OneHotEncoder 上的缺失值,但尚不清楚选项是什么。在此期间,这里有一个手动方法。

  • 用 Pandas 填充分类缺失或用字符串“missing”填充 SimpleImputer
  • 然后使用 OneHotEncoder
  • 使用 one-hot 编码器的 get_feature_names 来识别每个原始特征对应的列,特别是“缺失”指示符。
  • 对于每一行和每个原始分类特征,当 1 在“缺失”列中时,将 0 替换为 np.nan ;然后删除缺少的指标列。
  • 现在一切都应该设置为运行 KNNImputer
  • 最后,如果需要,对估算的分类编码列进行后处理。 (简单的四舍五入可能会让你得到一个全零行,但我不认为使用 KNNImputer 你可以连续得到一个以上的 1。你可以改为 argmax 来得到一个 1。)
  • 关于python - Scikit-learn 中 OneHotEncoder 和 KNNImpute 之间的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62868129/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com