【问题标题】:Dealing with missing values处理缺失值
【发布时间】:2019-02-10 10:07:24
【问题描述】:

我有两个数据集,训练集和测试集。 如果我在训练集中有 NA 值但在测试集中没有,我通常会删除训练集中的行(如果它们很少),仅此而已。

但是现在,我在这两个集合中都得到了很多 NA 值,所以我放弃了获得大部分 NA 值的功能,我想知道现在该怎么办。

我是否应该在测试集中删除相同的特征并估算其余的缺失值?

还有其他我可以用来预处理数据的技术吗?

逻辑回归、决策树或神经网络等机器学习算法能否处理缺失值?

数据集来自 Kaggle 比赛,因此我无法在拆分数据之前进行预处理

提前致谢

【问题讨论】:

标签: python machine-learning missing-data


【解决方案1】:

这个问题不是那么容易回答的,因为它取决于 NA 值的类型。

NA 值是由于某种随机原因造成的吗?或者是否有他们失踪的原因(调查中没有匹配的多项选择答案,或者可能是人们不想回答的问题)

首先,最好使用简单的插补策略,这样您就可以根据数据拟合模型。因此,我的意思是从估计的概率分布中进行平均插补或抽样。甚至随机抽样值。请注意,如果您仅取现有值的平均值,则会更改数据集的统计信息,即减少标准偏差。选择模型时应牢记这一点。

其次,您必须运用您的领域知识来找到好的填充值。

关于您的最后一个问题:如果您想用机器学习模型填充值,您可以使用数据集的其他特征并隐式假设缺失特征和其他特征之间存在依赖关系。根据您稍后将用于预测的模型,您可能无法从中间估计中受益。

我希望这会有所帮助,但正确答案确实取决于数据。

【讨论】:

  • 感谢您的回答!数据来自 Kaggle 比赛,所以我实际上不知道这些值是否是由于随机原因造成的。
【解决方案2】:

一般来说,机器学习算法不能很好地处理缺失值(主要是因为不知道缺失值的原因或缺失的含义,甚至对于不同的观察结果可能有所不同)。

良好的做法是在训练集和测试集之间进行拆分之前进行预处理(您的训练和测试数据是否真的是数据的随机子集,应该是这样吗?)并确保两个集的处理方式相同。

有很多方法可以处理您丢失的数据,这在很大程度上取决于数据以及您的目标,这是更好的方法。如果您需要更具体的建议,请随时联系。

【讨论】:

  • 是否有任何博客或文章可供我查找信息?我只知道处理缺失数据的插补。
  • 如果你的 ML 算法无法处理缺失数据,基本上只有两种方法可以处理:忽略相应的观察(或特征)或进行某种插补,其中有很多(其中许多又依赖于机器学习模型)。对于这一点,以及许多其他 Python/ML 主题,Jake VanderPlas 的书《数据科学手册》是一个极好的资源,它在 github 上作为 ipynb notebooks 完全可用。您要查找的部分是:github.com/jakevdp/PythonDataScienceHandbook/blob/master/…
猜你喜欢
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 2018-09-14
  • 2015-10-23
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
相关资源
最近更新 更多