【问题标题】:How to preprocess a column with too many NAN values?如何预处理具有太多 NAN 值的列?
【发布时间】:2019-04-01 13:44:52
【问题描述】:

我有一个形状为(596000, 58) 的训练数据,下图有一些特征与使用train.isnull().sum() 的特征/行中的“NAN”数量。

考虑到每个特征都具有同等重要性并且是分类值我应该删除列 cat6 和 cat8 吗?cat6 411792/596000 是 NaN,cat8 266928/596000 是 NaN。

有没有办法处理这种情况?还是我必须删除这两列?


输入[12]:train.isnull().sum()

输出[12]:

【问题讨论】:

    标签: python pandas csv machine-learning nan


    【解决方案1】:

    对于分类特征而言,几乎没有可能存在缺失值的策略:

    • 删除功能;
    • NaN 值设置此特征的最频繁值;
    • NaN 值设置新类(例如,nan_value);
    • 最复杂的方法 - 创建一个单独的模型来预测当前特征的缺失值;

    什么最适合?深入了解您的数据。建立一个简单的基线模型并尝试所有方法。这应该有助于回答您的问题。

    在您的情况下,是的,cat6 和 cat8 功能对您来说毫无用处,但是您仍然需要对这个问题进行简短的调查。

    【讨论】:

    • 我在训练样本和测试样本上都使用了 EDA,结果是 cat6 的缺失值相同,而 cat8 的缺失值要少得多。那么我应该删除 cat6 并创建一个新类吗?目标只有 0/1,所以我认为为 NaN 制作一个新类应该足够好了......
    • 我建议,使用一些简单的模型尝试不同的方法: - 删除 cat6 和 can8 列; - 删除 cat6 并为 can8 列中的缺失值创建新类; .... 之后,您可以比较分数并选择最佳方法
    【解决方案2】:

    最好同时删除cat6cat8。 由于您有 500k 值,假设上述所有值都是分类的,其余您可以为其他特征的其余 NaN 值创建 new category

    【讨论】:

      猜你喜欢
      • 2020-02-29
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2020-11-19
      相关资源
      最近更新 更多