【问题标题】:sklearn imputer drop column with missing valuessklearn imputer 删除列缺失值
【发布时间】:2022-01-06 18:06:24
【问题描述】:

我目前正在学习sklearn imputer,我发现有一种策略没有被估算者实施。

我想建立一个管道来删除所有缺失值的列或删除所有缺失值的行。

我为什么要这个?

因为我想做一个网格搜索,并在我的 RMSE 或分类分数上找到任何插补方法的缺陷。

有没有办法使用 sklearn 管道来做到这一点?还是我应该创建自己的 imputer?

如果以前有人问过这个问题,请随时建议关闭问题并指出正确的资源。

关于更多上下文,我有 21 个特征和 1000 个数据点,只有一列有缺失值,这些缺失值是列中值的 50%。我只是想探索一下缺失值插补方法对我的分类器准确率和 f1 分数的影响。

【问题讨论】:

  • 所以你想比较 missingRowsRemoved vs missingColumnsRemoved vs imputationMethod1 vs imputationMethod2 等?是这样吗?
  • 是的.. 没错@RSale
  • 这需要更多上下文。你使用什么样的数据。你在解决什么样的问题?您正在对什么进行网格搜索?
  • 估算是一门艺术,选择正确的方法完全取决于您拥有的数据。
  • 这样的转换器不会是真正的“imputer”。我不知道有一个通用的包可以提供这样的功能。 “删除包含任何缺失的任何列”将很容易构建为自定义转换器。 “删除包含任何缺失的任何行”将更加困难,因为 sklearn 始终假设行保持固定顺序并且既不删除也不添加。您也许可以使用 imblearn 包及其重采样管道,但它会有点 hacky。

标签: python scikit-learn imputation


【解决方案1】:

我建议使用自动输入库。它可能是目前处理缺失值数据集的最佳工具。

它有一个完全按照您的要求执行的功能,删除具有任何缺失值的行。

from autoimpute.imputations import MiceImputer, SingleImputer, listwise_delete

listwise_delete(df, inplace=True, verbose=False)

总的来说,sklearn 的 imputer 的用处非常有限,而 autoimpute 能够填补很多空白。更具体地说,它允许:

  • 在计算估算值时明确设置您希望作为变量处理的列
  • 为每一列或一组列设置不同的插补算法
si_dict_col = SingleImputer(
    strategy={"gender":"categorical", "salary": "pmm", "weight": "pmm"},
    predictors={"gender": ["salary", "weight", "looks"], "salary": ["weight", "gender"])

  • 内置方法可以可视化不同插补方法的结果
plot_imp_scatter(data_het_miss, "x", "y", "least squares")

它也遵循 sklearn 的模式,可以在管道中替代 sklearn 自己的 imputer 函数。

【讨论】:

  • 谢谢你的建议。我会去看看
  • @EspoirMurhabazi 很高兴能够提供帮助!我的帖子能回答你的问题吗?
  • 我没试过,试了我就标记为答案。
猜你喜欢
  • 2018-11-24
  • 2017-05-01
  • 2016-11-04
  • 2020-05-09
  • 2018-03-18
  • 2014-10-18
  • 2022-11-20
  • 1970-01-01
  • 2016-07-28
相关资源
最近更新 更多