【问题标题】:Impute among specific values only仅在特定值之间进行插补
【发布时间】:2020-08-08 04:43:18
【问题描述】:

我有一个数据框,我需要根据其他样本估算一个值。该列是数字,表示行业编号 fx(1111 - IT、1234 - 金融等)。我尝试应用 KNNImputer,它确实会产生数字,但据我了解,它会平均其邻居的输出,从而生成列中不存在的数字。

输入代码如下:

X = df.copy()
imputer = KNNImputer(n_neighbors=5)
filled = imputer.fit_transform(X)

cols = X.columns

df_imputed = pd.DataFrame(data=filled, columns = cols)

它提供的输出是:6405.2 但是,最接近的行业代码是 6399 或 6411

如何仅考虑现有值对数值列进行插补?

【问题讨论】:

  • 最简单的方法是将列表中不存在的值替换为现有值中的关闭值。您可以通过比较差异来做到这一点。

标签: scikit-learn knn imputation


【解决方案1】:

技术对此的回答实际上非常简单:只需在你的 knn imputer 中询问一个邻居:

imputer = KNNImputer(n_neighbors=1)

这样,knn 预测不会在(许多)邻居之间进行平均,但它们实际上只包含数据中已经存在的值。

请注意,这是您实际提出的编程问题的答案;如果这实际上是基于您的数据和功能的特定形式的正确方法超出了答案的范围(并且可以说是 SO 的题外话)。

【讨论】:

  • 虽然这在技术上是正确的,但我回想起 Ian Malcolm 博士在侏罗纪公园中的名言:“是的,但你们的科学家们非常关注他们是否能做到,他们没有停下来思考如果他们应该这样做。”
  • @blacksite 公平点,刚刚更新了答案以阐明其范围和可能的限制(已经在您发表评论之前;)
猜你喜欢
  • 2021-11-05
  • 2019-12-17
  • 2019-06-23
  • 2013-04-18
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
相关资源
最近更新 更多