处理不完整/缺失数据的技术

机器算法验证 缺失数据
2022-03-21 09:58:05

我的问题是针对在分类器/模型训练/拟合期间处理不完整数据的技术。

例如,在一个有几百行的数据集中,每一行有五个维度和一个类标签作为最后一项,大多数数据点看起来像这样:

[0.74, 0.39, 0.14, 0.33, 0.34, 0]

一些可能看起来像这样:

[0.21, 0.68, ?, 0.82, 0.58, 1]

因此,这些类型的数据点是本问题的重点。

我问这个问题的最初原因是直接摆在我面前的问题;但是,在发布我的问题之前,我认为如果我重新措辞它可能会更有用,这样答案将对社区的大部分人有用。

作为一个简单的启发式方法,让我们根据在处理流程中使用它们的时间来划分这些数据处理技术——在输入到分类器之前或期间(即,该技术在分类器内部)。

对于后者,我能想到的最好的例子是决策树中使用的巧妙的“三向分支”技术。

毫无疑问,前一类要大得多。我所知道的技术都属于以下组之一。

在最近查看我关于“丢失数据处理”的个人笔记时,我注意到我有一个令人印象深刻的技术列表。我只是保留这些笔记以使您高枕无忧,以防初级同事问我如何处理丢失的数据。在实际实践中,我实际上并没有使用它们中的任何一个,除了最后一个。

  1. 插补:一组技术的广泛标准,其共同点(我相信)是缺失的数据直接由相同的数据集提供——替代而不是估计/预测。

  2. 重构:使用自动关联网络(只是输入和输出层大小相等的神经网络——换句话说,输出与输入具有相同的维度)估计丢失的数据点;这里的想法是在完整数据上训练这个网络,然后输入不完整的模式,并从输出节点读取缺失值。

  3. 自举:(我不应该认为没有必要总结,因为它在统计分析中的其他地方使用)。

  4. 拒绝:悄悄地从你的训练集中删除缺失/损坏元素的数据点,并假装它们不存在。

3个回答

我对另一个问题给出了这个答案,但它也可能适用于这里。

“有一个相当新的研究领域叫做矩阵补全,它可能满足你的需求。Emmanuel Candes在这次讲座中给出了非常好的介绍”

本质上,如果您的数据集具有低秩(或近似低秩),即您有 100 行,但实际矩阵有一些小秩,例如 10(或只有 10 个大奇异值),那么您可以使用 Matrix Completion 来填充缺失的数据。

我在这里可能有点不正统,但到底是什么。请注意:这条思路来自我自己的分类哲学,即当我的目的完全是纯粹的预测时使用它——而不是解释、概念上的连贯性等。因此,我在这里所说的与我的方式相矛盾'd 方法建立一个回归模型。

不同的分类方法处理缺失数据的能力各不相同,并且取决于其他一些因素^,我可能只是尝试#5:使用不会阻塞那些 NA 的分类器。走这条路的部分决定可能还包括考虑在您将应用该模型的未来数据中出现类似比例的 NA 的可能性有多大。如果某些变量的 NA 将与课程相提并论,那么与它们一起滚动可能是有意义的(即,不要建立一个预测模型来假设比你实际拥有的信息更多的数据,或者你'我会自欺欺人地告诉自己它的预测性如何)。事实上,如果我不相信 NA 是随机丢失的,我会倾向于重新编码一个新变量(或者一个新级别,如果它)

如果我有充分的理由使用不能很好地处理缺失数据的分类器,那么我的方法将是#1(多重插补),寻求找到一个在插补数据集上表现相似的分类模型。

^包括:您的预测变量有多少缺失,是否存在系统模式(如果有,值得仔细研究并考虑分析的影响),以及您需要处理的总体数据量.

如果您对负责相关数据的数据生成过程有合理的预感,那么您可以使用贝叶斯思想来估计丢失的数据。在贝叶斯方法下,您只需假设缺失数据也是随机变量,并根据观察到的数据构建缺失数据的后验。然后,后验均值将用作缺失数据的替代品。

从广义上讲,贝叶斯模型的使用可能有资格作为插补,但我想提及它,因为它没有出现在您的列表中。