sklearn缺失值填充,删除带有缺失值的列。

4

我目前正在学习 sklearn imputer ,我发现其中没有实现一种策略。

我想要构建一个管道,删除任何具有缺失值的列或删除所有具有缺失值的行。

为什么我想这样做?

因为我想进行网格搜索,并找到任何填充方法在我的RMSE或分类得分上的缺陷。

有没有办法在sklearn管道中实现这个操作?还是我应该创建自己的填充器?

如果此问题之前已经被问过,请随意建议关闭问题并指出正确的资源。

更多背景信息,我有 21 个特征和 1000 个数据点,只有一列有缺失值,并且该列的缺失值占列值的 50%。 我只是想探索缺失值填充方法对我的分类器准确性和 F1 分数的影响。


所以你想比较missingRowsRemoved和missingColumnsRemoved和imputationMethod1和imputationMethod2等吗?是这样吗? - RSale
是的,没错 @RSale - Espoir Murhabazi
这基本上是数值数据,只有一列数据缺失。我还没有进行网格搜索,但我正在探索缺失值对准确度得分的影响。 - Espoir Murhabazi
1
这样的转换器实际上不会是一个“imputer”。我不知道是否有常见的软件包提供此类功能。删除任何包含任何缺失值的列将很容易构建为自定义转换器。删除任何包含任何缺失值的行将更加困难,因为sklearn始终假定行保持固定顺序,既不删除也不添加。您可以利用imblearn软件包及其重新采样管道,但这可能有点hacky。 - Ben Reiniger
啊..看起来我完全错过了imputer的重点..是的,你说得对..它不会是一个imputer。 - Espoir Murhabazi
显示剩余2条评论
1个回答

2
我建议使用autoimpute库。目前它可能是处理具有缺失值的数据集的最佳工具。
它有一个函数可以完全按照您要求的方式删除任何缺失值的行。
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函数。

谢谢您的建议。我会去查看它。 - Espoir Murhabazi
@EspoirMurhabazi 很高兴能够帮助!我的帖子回答了你的问题吗? - user4718221
我还没有尝试过,一旦我尝试过了,我会将其标记为答案。 - Espoir Murhabazi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接