【问题标题】:replace missing values in categorical data替换分类数据中的缺失值
【发布时间】:2018-02-17 15:08:36
【问题描述】:

假设我有一列包含分类数据“红色”“绿色”“蓝色”和空单元格

red
green
red
blue
NaN

我确定 NaN 属于红色绿色蓝色,我应该用颜色的平均值替换 NaN 还是一个太强的假设?会是

col1 | col2 | col3
  1      0     0
  0      1     0
  1      0     0
  0      0     1
 0.5    0.25  0.25

或者甚至缩放最后一行但保持比例以使这些值的影响较小?通常最佳做法是什么?

 0.25  0.125  0.125

【问题讨论】:

    标签: machine-learning missing-data categorical-data


    【解决方案1】:

    除了似乎最常用的 Lan 答案的方法之外,您还可以使用基于矩阵分解的方法。例如,Generalized Low Rank Models 的一个变体可以插补此类数据,就像概率矩阵分解用于插补连续数据一样。

    GLRMs can be used from H2O 为 Python 和 R 提供绑定。

    【讨论】:

    • 打算提出同样的建议。矩阵分解是矩阵补全的一种很好的通用技术,在某种意义上可以考虑缺少分类数据。在特定情况下它可能会也可能不会那么好,但值得一试。
    【解决方案2】:

    处理缺失数据的最简单策略是删除包含缺失值的记录。

    scikit-learn 库提供了Imputer() 预处理类,可用于替换缺失值。由于是分类数据,不推荐使用均值作为替换值。你可以使用

    from sklearn.preprocessing import Imputer
    imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=0)
    

    Imputer 类直接对 NumPy 数组而不是 DataFrame 进行操作。

    最后但并非最不重要的一点是,并非所有 ML 算法都无法处理缺失值。 ML 的不同实现也不同。

    【讨论】:

      【解决方案3】:

      这取决于您想对数据做什么。 这些颜色的平均值对您的目的有用吗? 你正在创造一个新的可能价值,这可能是不想要的。特别是因为您在谈论分类数据,并且您正在处理它,就像它是数字数据一样。

      在机器学习中,您可以将缺失值替换为与目标属性相关的最常见分类值(您想要预测的内容)。

      例子:你想通过看车来预测一个人是男是女,而颜色特征有一些缺失值。如果男性(女性)司机的大部分汽车是蓝色(红色),您将使用该值来填充男性(女性)司机的汽车缺失条目。

      【讨论】:

      • 感谢您的回答。基本上我没有具体的目标,这是一个硕士后课程的问题。我有一个数据集,必须解释在这种情况下哪种方法最好
      • 如果没有具体目标,我根本不会更改数据集。缺少某些值可能有充分的理由。因此,您最终会通过更改数据从数据中删除信息。以汽车为例:如果某人没有汽车怎么办。然后当然它没有颜色导致缺失值。用一些值替换它会导致错误的结果(这里:假设这个人有车)。缺失值并不一定意味着缺失信息。
      猜你喜欢
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 2019-08-15
      相关资源
      最近更新 更多